此篇只說nginx的多級代理配置,不扯其他的.
需求:hba.changyoufun.com-121.201.125.239(gd1)–hk1–co(alphaclash.ggdev.co) 廣東代理—>香港—>加拿大
由於idc機房在加拿大,所以經常會配些nginx多級反向代理到國內.(丟包很嚴重.)
下面的Nginx配置我只寫80的,443的忽略,簡化nginx的配置,引數也不一一列舉不然太多了.
gd1的反向代理配置:(就是一個反向代理)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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反向代理)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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版:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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 ;
}
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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了,所以最後一層也要配上相匹配的域名配置.
本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1960815