實戰錄 | 今天聊聊Nginx反向代理使用

《實戰錄》導語

本期分享人爲雲端衛士SOC工程師田全磊,將帶來Nginx反向代理使用。本文涉及到nignx的安裝、nginx的配置說明、nginx的負載均衡、nginx的反向代理和nginx的ssl方反向代理以及nginx location路徑匹配優先級等問題。


最近工作中經常使用nginx,爲了能夠更好的使用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


Nginx.conf 基本配置


#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;
        }
     }
}


Nginx.conf  server配置說明


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;
        }
     }



server配置路徑匹配問題


Nginx location中可能涉及的匹配規則有:


  • = 精確匹配

  • ^~ 普通字符匹配,區分大小寫

  • ~ 正則匹配,區分大小寫

  • /xxx/yyy.zzz 最長匹配

  • /


其優先級順序如下:

  • =優先級大於^~

  • ^~優先級大於~

  • ~ 對比 /xxx/yyy.zzz

  • ^~優先級大於/xxx/yyy.zzz

  • ~優先級大於/

  • /xxx/yyy.zzz優先級大於/

  • /xxx/yyy/ 優先級大於 /xxx/


綜上所述location規則優先級順序爲 = > ^~ > ~ > /xxx/yyy.zzz > / ,路徑匹配的優先級與location在文檔中的位置先後無關。


Nginx實現ssl反向代理


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;
        }
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章