《實戰錄》導語
本期分享人爲雲端衛士SOC工程師田全磊,將帶來Nginx反向代理使用。本文涉及到nignx的安裝、nginx的配置說明、nginx的負載均衡、nginx的反向代理和nginx的ssl方反向代理以及nginx location路徑匹配優先級等問題。
最近工作中經常使用nginx,爲了能夠更好的使用nginx,我搜羅了很多nginx相關的技術文章來讀,所以纔有了下面以下內容。在此,爲文中引用到和參考到的文章提供者表示感謝。如文中相關內容有錯誤,也歡迎大家留言提出。
1)pcre安裝,支持正則表達式
http://www.pcre.org/
# tar zxvf pcre-7.9.tar.gz
# cd pcre-7.9
#./configure
# make && make install
2)openssl安裝(可選),支持安全協議的站點
http://www.openssl.org/
# tar zxvf openssl-0.9.8l.tar.gz
# cd openssl-0.9.8l
#./config
# make && make install
3)nginx的安裝
# tar zxvf nginx-0.7.64.tar.gz
# cd nginx-0.7.64
4)啓動
# cd usr/local/nginx/sbin
# /nginx
5)重啓
./nginx -s reload
#user nobody;
worker_processes 1; #nginx進程數,建議設置爲等於CPU總核心數。
events {
worker_connections 1024; #單個進程最大連接數(最大連接數=連接數*進程數)
}
http {
include mime.types;#文件擴展名與文件類型映射表
default_type application/octet-stream;#默認文件類型
sendfile on;#sendfile on; #開啓高效文件傳輸模式
keepalive_timeout 60;#長連接超時時間,單位是秒
#gzip模塊設置(略)
upstream blog.ha97.com {
#upstream的負載均衡,weight是權重,可以根據機器配置定義權重
#weigth參數表示權值,權值越高被分配到的機率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.24.152:8080/test1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /test {
proxy_pass http://192.168.24.152:8080/abc;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server{
listen 8082;#監聽端口
server_name localhost;
location / {
proxy_pass http://192.168.24.152:8080/test1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
1) server配置說明
server {
listen 80; #監聽端口
server_name localhost; #域名可以有多個,用空格隔開
location / {
proxy_pass http://192.168.24.152:8080/test1;
proxy_set_header X-Real-IP $remote_addr;
#把真實的IP發送給 轉發的web服務器,否則轉發的IP是nginx這臺的IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#意思是增加一個$proxy_add_x_forwarded_for到X-Forwarded-For裏去
#例X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3 代表 請求由1.1.1.1發出,
#經過三層代理,#第一層是2.2.2.2,第二層是3.3.3.3,而本次請求的來源
#IP4.4.4.4是第三層代理
}
}
2)多個server配置,監聽不同端口
server { #server1
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.24.152:8080/test1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server{ #server2
listen 8082;#監聽端口
server_name localhost;
location / {
proxy_pass http://192.168.24.152:8080/test1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Nginx location中可能涉及的匹配規則有:
-
= 精確匹配
-
^~ 普通字符匹配,區分大小寫
-
~ 正則匹配,區分大小寫
-
/xxx/yyy.zzz 最長匹配
-
/
其優先級順序如下:
-
=優先級大於^~
-
^~優先級大於~
-
~ 對比 /xxx/yyy.zzz
-
^~優先級大於/xxx/yyy.zzz
-
~優先級大於/
-
/xxx/yyy.zzz優先級大於/
-
/xxx/yyy/ 優先級大於 /xxx/
綜上所述location規則優先級順序爲 = > ^~ > ~ > /xxx/yyy.zzz > / ,路徑匹配的優先級與location在文檔中的位置先後無關。
server {
listen 443; #監聽443端口
server_name localhost;
ssl on; #啓用ssl加密
ssl_certificate /ect/cert/free4lab.crt; #服務器證書crt文件
ssl_certificate_key /ect/cert/free4lab.key; #服務器私鑰key文件
location / {
proxy_pass http://192.168.24.152:8080/test1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}