以下內(nèi)容均copy該文章,鏈接地址
一、下載
下載鏈接硬猫。
下載后解壓即可。
二改执、修改配置文件
nginx配置文件在 nginx-1.8.0\conf\nginx.conf
server {
listen 80;
server_name xxx.com;
# add_header '*' ;
location /u/ {
# 反向代理透傳客戶端ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:8001;
proxy_redirect off;
}
location /c/ {
proxy_pass http://127.0.0.1:8002;
# WebScoket Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin xxx;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
備份一下這個配置文件啸蜜。
首先為服務(wù)器設(shè)置監(jiān)聽端口,然后是服務(wù)的域名辈挂。
location的具體用法在這里要展開說一下衬横,因為實在太常用到了。
location [=|~|~*|^~] patt {
}
這里分別是4個語法
精確匹配终蒂。
正則表達(dá)式匹配蜂林。
正則表達(dá)式不區(qū)分大小寫匹配。
^~ 開頭表示uri以某個常規(guī)字符串開頭后豫,理解為匹配url路徑即可悉尾。nginx不對url做編碼突那,因此請求為/static/20%/aa挫酿,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。
另外還有一種用法沒在這里 加 愕难!號的用法早龟。!和!*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配的正則。
這里比如我要捕捉一個請求 /oauth/user 的請求轉(zhuǎn)發(fā)到本地 8000 端口:
location /oauth/ {
proxy_pass http://localhost:8000;
}
這里比如我又要捕捉一個/api/pp/asdasd 的請求轉(zhuǎn)發(fā)到 /pp/asdasd:
location ~ ^/api/(.*) {
proxy_pass http://127.0.0.1:8000/$1?$args;
}
這個正則寫法稍微進階了一點猫缭。我們以正則正則表達(dá)式 ^ 表示開始匹配葱弟,然后精確匹配/api/這一層然后使用正則表達(dá)式分組捕捉后面捕捉到的信息,在轉(zhuǎn)發(fā)的時候我們把捕捉到的分組信息追加到轉(zhuǎn)發(fā)之后猜丹,就完成了一個動態(tài)轉(zhuǎn)發(fā)地址芝加,另外值得一題的是,location中捕捉到的 uri 是不帶參數(shù)的射窒,如果需要把參數(shù)也追加到后面需要手動增加后面 $args 變量藏杖。這里的 $args 由 nginx 提供用于存儲傳遞的變量将塑。更多探索可以參考文章末尾 reference 的第一篇和第三篇文章。
下面我依次介紹各參數(shù)作用:
proxy_set_header X-Real-IP $remote_addr; # 遠(yuǎn)端真實ip地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 反向代理之后轉(zhuǎn)發(fā)之前的ip地址
proxy_set_header Host $http_host; # http請求的主機域名
proxy_set_header X-NginX-Proxy true; # nginx代理
這些參數(shù)都是在nginx反向代理中使用的蝌麸。
proxy_pass http://127.0.0.1:8001; # 反向代理轉(zhuǎn)發(fā)地址
proxy_redirect off; # 代理是否支持重定向
下面匹配/c/路徑下的点寥,是我的websocket轉(zhuǎn)發(fā)服務(wù)。跟上面不同的是来吩,他需要再header里面加入下面內(nèi)容
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
升級http1.1到 websocket協(xié)議敢辩。另外有一個特別值得注意的地方是,如果websocket服務(wù)器在收到websocket握手包弟疆,查看Origin信息與所在域信息不符的話戚长。會直接拒絕服務(wù)。這點很坑兽间,我花了接近半天的時間來找為什么連不上的原因历葛,最后竟然發(fā)現(xiàn)是Origin 必須和請求地址在一個域,不然會被拒絕訪問并且返回403.
另外以上的所有配置里面的變量都是可以通過get_header里面的信息拿到并且獲取的嘀略。
另外再提一點就是 upstream 的使用恤溶,之前我都是直接在 proxy_pass 那里寫轉(zhuǎn)發(fā)地址。后來發(fā)現(xiàn)只要指定好 upstream 地址之后帜羊,就可以方便的進行負(fù)載均衡或者直接用upstream 的 name 進行轉(zhuǎn)發(fā)咒程。這里再貼一個配置看下:
server {
listen 8030;
server_name odin;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location ~ ^/api/v4/axiba/(.*) {
proxy_pass http://odin/$1?$args;
}
}
upstream odin {
server localhost:8999;
}
這里我配置了一個叫 odin 的服務(wù)器。然后指定了一個 server 地址讼育。這里其實可以同時指定很多個 server 地址進行負(fù)載均衡帐姻。
然后在 location 中使用的時候就可以設(shè)置轉(zhuǎn)發(fā)了 要使用 http//:upstream/XXXX 這種形式。
根據(jù)各不同想更詳細(xì)查看配置的 可以查閱nginx的官網(wǎng)和reference奶段。
以上饥瓷。
Reference:
https://www.kancloud.cn/curder/nginx/97541 Nginx的location詳解
https://segmentfault.com/n/1330000006925038 nginx 配置文件梳理
http://seanlook.com/2015/05/17/nginx-location-rewrite/ nginx配置location總結(jié)及rewrite規(guī)則寫法
http://www.ha97.com/5194.html (總結(jié))Nginx配置文件nginx.conf中文詳解
http://nginx.org/en/docs/http/websocket.html WebSocket proxying
三、啟動nginx
注意不要直接雙擊nginx.exe痹籍,這樣會導(dǎo)致修改配置后重啟呢铆、停止nginx無效,需要手動關(guān)閉任務(wù)管理器內(nèi)的所有nginx進程
在nginx.exe目錄蹲缠,打開命令行工具棺克,用命令 啟動/關(guān)閉/重啟nginx
start nginx : 啟動nginx
nginx -s reload :修改配置后重新加載生效
nginx -s reopen :重新打開日志文件
nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確
關(guān)閉nginx:
nginx -s stop :快速停止nginx
nginx -s quit :完整有序的停止nginx
如果遇到報錯:
bash: nginx: command not found
有可能是你再linux命令行環(huán)境下運行了windows命令,
如果你之前是允許 nginx -s reload報錯线定, 試下 ./nginx -s reload
或者 用windows系統(tǒng)自帶命令行工具運行