17,nginx的多級代理


需求:hba.changyoufun.com-121.201.125.239(gd1)--hk1--co(alphaclash.ggdev.co)  廣東代理--->香港--->加拿大
由於idc機房在加拿大,所以經常會配些nginx多級反向代理到國內.(不做代理client就得FQ,或者說是丟包很嚴重.)

下面的Nginx配置我只寫80的,443的忽略,簡化nginx的配置,參數也不一一列舉不然太多了.
gd1的反向代理配置:(就是一個反向代理)

cat hba.changyoufun.com.conf
server{
 listen 121.201.125.239:80;
  
 server_name hba.changyoufun.com;
 access_log /data/weblogs/hba.changyoufun.com.access.log main;
 index index.html index.php index.htm;
 location / {
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_pass http://hba80;
   }
}
Upstream配置(代理的是hk1的內網ip):
 upstream hba80 {
  server 10.105.3.222:80;  
 }
 upstream hba443 {
  server 10.105.3.222:443;  
 }
 
hk1的反向代理配置:(也是一個nginx反向代理)
cat hba.changyoufun.com.conf
server{
 listen 10.105.3.222:80;
 server_name hba.changyoufun.com;
 access_log /data/weblogs/hba.changyoufun.com.access.log main;
 index index.html index.php index.htm;
 location / {
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_pass http://hba80;
   }
}
 
Upstream配置(代理的是alphaclash.ggdev.co域名的ip地址):
upstream hba80 {
  server 216.66.17.34:80;  
 }
 upstream hba443 {
  server 216.66.17.34:443;  
 }
co機房原先已經存在alphaclash.ggdev.co域名的配置,只需要copy一份alphaclash.ggdev.co的nginx配置,將域名替換為hba.changyoufun.com即可.
 
 
co的兩份nginx配置:

nginx和php的web版:

cat hba.changyoufun.com.conf
server{
  listen 216.66.17.34:80;
 server_name hba.changyoufun.com ;
 access_log /data/weblogs/hba.changyoufun.com.access.log main;
 index index.html index.php index.htm;
root /product/clash/alpha/web/htdocs;
location ~ ^/.*(do|php)$ {
  fastcgi_pass php_proxy;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_script_name;
  include /etc/nginx/fastcgi_params;
 }
}
 
cat alphaclash.ggdev.co.conf
server{
  listen 216.66.17.34:80;
 server_name alphaclash.ggdev.co;
 access_log /data/weblogs/alphaclash.ggdev.co.access.log main;
 index index.html index.php index.htm;
root /product/clash/alpha/web/htdocs;
location ~ ^/.*(do|php)$ {
  fastcgi_pass php_proxy;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_script_name;
  include /etc/nginx/fastcgi_params;
 }
}
 
注釋:其實nginx的代理很簡單,很多時候是沒想明白,既然代理alphaclash.ggdev.co,前面兩級代理配置了這個域名不就ok了?仔細想發現nginx代理根據ip:端口找域名,然后在location匹配到的location段再找upstream段,再根據upstream段的ip+port找下級域名,最后發現最后一級沒有相匹配的域名就報404了,所以最后一層也要配上相匹配的域名配置.
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM