在nginx中配置proxy_pass時,如果是按照^~比對路徑時,要注意proxy_pass後的url最後的/。當加上了/,相當于是絕對根路徑,則nginx不會把location中比對的路徑部分代理走;如果沒有/,則會把比對的路徑部分也給代理走。
比如下面設定:
location ^~ /wangshibo/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
proxy_pass http://js.test.com/;
}
如上面的配置,如果請求的url是http://servername/wangshibo/test.html會被代理成http://js.test.com/test.html
而如果這麼配置
location ^~ /wangshibo/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
proxy_pass http://js.test.com;
}
則請求的url是http://servername/wangshibo/test.html會被代理到http://js.test.com/wangshibo/test.html
當然,可以用如下的rewrite來實作/的功能
location ^~ /wangshibo/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
rewrite /wangshibo/(.+)$ /$1 break;
proxy_pass http://js.test.com;
}
=====================注意一些配置細節=========================
upstream bobo {
ip_hash;
server 192.168.10.73:80 max_fails=3 fail_timeout=15s;
server 192.168.10.74:80 max_fails=3 fail_timeout=15s;
}
server {
listen 80;
server_name bobo.kevin.com;
access_log /data/nginx/logs/bobo.kevin.com-access.log main;
error_log /data/nginx/logs/bobo.kevin.com-error.log;
location / {
proxy_pass http://bobo;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
proxy_max_temp_file_size 128m;
#proxy_cache mycache;
#proxy_cache_valid 200 302 1h;
#proxy_cache_valid 301 1d;
#proxy_cache_valid any 1m;
}
location /los/ {
proxy_pass http://fvt.kevin.com;
}
}
location /han/ {
proxy_pass http://dcc.kevin.com/;
}
}
解釋說明:
1)通路http://bobo.kevin.com的請求會負載分發到192.168.10.73:80和192.168.10.74:80上面
2)通路http://bobo.kevin.com/los/.... 會代理跳轉到http://fvt.kevin.com/los/.... 上面
3)通路http://bobo.kevin.com/han/.... 會代理跳轉到http://dcc.kevin.com/.... 上面
4)注意proxy_pass跳轉upstream子產品時的配置和跳轉到一個完整url的配置(後者不需要加那些header配置以及健康檢查配置)
如下面一個配置執行個體
1)第一種配置
[root@BJLX_16_202_V vhosts]# cat ssl-wangshibo.conf
upstream at {
server 192.168.1.202:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 443;
server_name www.wangshibo.com;
ssl on;
### SSL log files ###
access_log logs/wangshibo_access.log;
error_log logs/wangshibo_error.log;
### SSL cert files ###
ssl_certificate ssl/wang.cer;
ssl_certificate_key ssl/wang.key;
location /attendance/ {
proxy_pass http://at; //不需要加上"/"
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
通路https://www.wangshibo.com/attendance/和http://192.168.1.202:8080/attendance結果是一緻的。
2)第二種配置
[root@BJLX_16_202_V vhosts]# cat ssl-wangshibo.conf
upstream at {
server 192.168.1.202:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 443;
server_name www.wangshibo.com;
ssl on;
### SSL log files ###
access_log logs/wangshibo_access.log;
error_log logs/wangshibo_error.log;
### SSL cert files ###
ssl_certificate ssl/wang.cer;
ssl_certificate_key ssl/wang.key;
location / {
proxy_pass http://at/attendance/; //一定要加上"/"
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
通路https://www.wangshibo.com和http://192.168.1.202:8080/attendance結果是一緻的。
如下配置,想要實作的需求:
192.168.1.27是後端的real server,8080端口是公司的ehr人事系統端口。
又由于該系統涉及到微信接口通路,即http://ehr.wang.com/attendance和http://ehr.wang.com/app
由于是内部系統,安全考慮,是以要求:
1)登入ehr人事系統的時候要求使用内網登入,即http://192.168.1.27:8080,通路前要先登入公司VPN
2)登入微信接口http://ehr.wang.com/attendance和http://ehr.wang.com/app使用外網登入,即使用解析後域名登入。
3)通路http://ehr.wang.com,強制跳轉為https://ehr.wang.com/attendance
[root@BJLX_4_21_P vhosts]# cat ehr.conf
server {
listen 80;
server_name ehr.wang.com;
access_log logs/ehr_access.log;
error_log logs/ehr_error.log;
return 301 https://$server_name$request_uri;
}
[root@BJLX_4_21_P vhosts]# cat ssl-ehr.conf
upstream ehr {
server 192.168.1.27:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 443;
server_name ehr.wang.com;
ssl on;
### SSL log files ###
access_log logs/ehr_access.log;
error_log logs/ehr_error.log;
### SSL cert files ###
ssl_certificate ssl/wang.cer;
ssl_certificate_key ssl/wang.key;
#ssl_session_timeout 5m;
location / {
return 301 https://ehr.wang.com/attendance;
}
location /attendance/ {
proxy_pass http://ehr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto https;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /app/ {
proxy_pass http://ehr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto https;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
注意:
由于從浏覽器通路(http)到源站的real server之間要經過Nginx反向代理層(https)
需要将proxy_set_header X-Forwarded-Proto https;這一行注釋掉,否則上面的配置無效。
如果中間沒有代理層,直接是在real server本機進行nginx的反向代理(即本機nginx反代到本機的8080端口),則這個參數無需注釋(已經過驗證)
---------------------------------------------------------------------------------------------------------------------------------------
再看下面一個需求:
通路https://toc.wang.com/storage/file/ 反向代理到http://192.168.80.105:80/storage/file/
通路https://toc.wang.com/storage/file/uploadOne 反向代理到http://192.168.80.130:8080/storage/file/uploadOne
通路https://toc.wang.com/storage/file/upload 反向代理到http://192.168.80.130:8080/storage/file/upload
通路其他https://toc.wang.com的url 反向代理到http://192.168.80.105:8080
在nginx的LB層的反向代理配置如下:
[root@nginx-web01 vhosts]# cat ssl-toc.conf
upstream toc-105-80 {
server 192.168.80.105:80 max_fails=3 fail_timeout=10s;
}
upstream toc-130-8080-1 {
server 192.168.80.130:8080 max_fails=3 fail_timeout=10s;
}
upstream toc-130-8080-2 {
server 192.168.80.130:8080 max_fails=3 fail_timeout=10s;
}
upstream toc-105-8080 {
server 192.168.80.105:8080 max_fails=3 fail_timeout=10s;
}
server {
listen 443;
server_name toc.wang.com;
ssl on;
### SSL log files ###
access_log logs/toc_access.log;
error_log logs/toc_error.log;
### SSL cert files ###
ssl_certificate ssl/wang.cer;
ssl_certificate_key ssl/wang.key;
# ssl_session_timeout 5m;
location /storage/file/ {
proxy_pass http://toc-105-80/storage/file/;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /storage/file/uploadOne {
proxy_pass http://toc-130-8080-1/storage/file/uploadOne;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location /storage/file/upload {
proxy_pass http://toc-130-8080-2/storage/file/upload;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
location / {
proxy_pass http://toc-105-8080;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
--------------------------------------------------------------------------------------------------
通路外網位址https://test.wang.com/storage/* 反向代理到内網位址 http://storage.wang-inc.com/*,即實作外網的連結通路到内網的檔案位址。
1)内網url的配置
[root@lb-ng01 vhosts]# cat storage.wang-inc.conf
upstream storage {
server 192.168.1.25:8080 max_fails=3 fail_timeout=10s;
server 192.168.1.26:8080 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name storage.wang-inc.com storage.wang.cn;
access_log logs/storage_access.log main;
error_log logs/storage_error.log;
location / {
proxy_pass http://storage;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
2)外網反向代理配置
[root@nginx-web01 vhosts]# cat ssl-test.conf
upstream storage {
server 192.168.1.25:8080 max_fails=3 fail_timeout=10s;
server 192.168.1.26:8080 max_fails=3 fail_timeout=10s;
}
server {
listen 443;
server_name test.wang.com;
ssl on;
### SSL log files ###
access_log logs/test_access.log main;
error_log logs/test_error.log;
### SSL cert files ###
ssl_certificate ssl/wang.cer;
ssl_certificate_key ssl/wang.key;
ssl_session_timeout 5m;
location /storage/ {
proxy_pass http://storage/;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
-------------------------------------------------------------------------------------------------
通路http://im.wang.com/_matrix/push/v1/notify 反向代理到192.168.1.36的5000端口
[root@nginx-web01 vhosts]# cat im.conf
upstream matrix {
server 192.168.1.36:5000 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name im.wang.com;
access_log logs/im_access.log main;
error_log logs/im_error.log;
location /_matrix/push/v1/notify {
proxy_pass http://matrix;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
HTTP頭域(proxy_set_header)清單與解釋
HTTP 頭域是HTTP協定中請求(request)和響應(response)中的頭部資訊,其實就是HTTP通信的操作參數,告訴web伺服器和浏覽器怎樣處理這個通信。
HTTP頭從一個請求資訊或者響應資訊的第二行開始(第一行是請求行或者響應行),以兩個CR-LF字元組結束(CR:回車符,\r,LF:換行符\n)
而每個HTTP頭是字元串形式的,用冒号分割的鍵值對,多個HTTP頭之間用CR-LF字元組隔開。
某些http頭可以有注釋,例如user-agent,server,via。但這些注釋會被伺服器或者浏覽器忽略IETF組織已經将一些核心的HTTP頭定義在RFC2616規範中,
這些HTTP頭是每個基于HTTP協定的軟體必須實作的,而其他一些更新和擴充的頭域也必須被基于HTTP的軟體實作。當然,各個軟體也可以定義自己的頭域。
另一方面,RFC2616規範中并沒有限制每個HTTP頭的長度,或者限制HTTP頭的數量,但出于性能和安全的考慮,多數伺服器都會自己作規定,例如apache2.3
就規定每個HTTP頭不能超過8190個位元組,每個請求不能超過100個HTTP頭。
以下來看看發送一個請求(request)時候,可能包含的各個HTTP頭和它的解釋。
------------标準的請求頭------------
Accept: 浏覽器(或者其他基于HTTP的用戶端程式)可以接收的内容類型(Content-types),例如 Accept: text/plain
Accept-Charset:浏覽器能識别的字元集,例如 Accept-Charset: utf-8
Accept-Encoding:浏覽器可以處理的編碼方式,注意這裡的編碼方式有别于字元集,這裡的編碼方式通常指gzip,deflate等。
例如 Accept-Encoding: gzip, deflate
Accept-Language:浏覽器接收的語言,其實也就是使用者在什麼語言地區,例如簡體中文的就是 Accept-Language: zh-CN
Authorization:在HTTP中,伺服器可以對一些資源進行認證保護,如果你要通路這些資源,就要提供使用者名和密碼,這個使用者名和密碼就是在Authorization
頭中附帶的,格式是“username:password”字元串的base64編碼,例如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==中,
basic指使用basic認證方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ==使用base64解碼就是“Aladdin:open sesame”
Cache-Control:這個指令在request和response中都有,用來訓示緩存系統(伺服器上的,或者浏覽器上的)應該怎樣處理緩存,因為這個頭域比較重要,
特别是希望使用緩 存改善性能的時候,内容也較多,是以我想在下一篇博文中主要介紹一下。
Connection:告訴伺服器這個user agent(通常就是浏覽器)想要使用怎樣的連接配接方式。值有keep-alive和close。http1.1預設是keep-alive。keep-alive就是
浏覽器和伺服器 的通信連接配接會被持續儲存,不會馬上關閉,而close就會在response後馬上關閉。但這裡要注意一點,我們說HTTP是無狀态的,跟
這個是否keep-alive沒有關系,不要認為keep-alive是對HTTP無狀态的特性的改進。
Cookie:浏覽器向伺服器發送請求時發送cookie,或者伺服器向浏覽器附加cookie,就是将cookie附近在這裡的。例如:Cookie:user=admin
Content-Length:一個請求的請求體的記憶體長度,機關為位元組(byte)。請求體是指在HTTP頭結束後,兩個CR-LF字元組之後的内容,
常見的有POST送出的表單資料,這個Content-Length并不包含請求行和HTTP頭的資料長度。
Content-MD5:使用base64進行了編碼的請求體的MD5校驗和。例如:Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Type:請求體中的内容的mime類型。通常隻會用在POST和PUT方法的請求中。例如:Content-Type: application/x-www-form-urlencoded
Date:發送請求時的GMT時間。例如:Date: Tue, 15 Nov 1994 08:12:31 GMT
Expect:訓示需要使用伺服器某些特殊的功能。(這個我不是很清楚)
From:發送這個請求的使用者的email位址。例如:From: [email protected]
Host:被伺服器的域名或IP位址,如果不是通用端口,還包含該端口号,例如:Host: www.some.com:182
If-Match:通常用在使用PUT方法對伺服器資源進行更新的請求中,意思就是,詢問伺服器,現在正在請求的資源的tag和這個If-Match的tag相不相同,如果相同,
則證明伺服器上的這個資源還是舊的,現在可以被更新,如果不相同,則證明該資源被更新過,現在就不用再更新了(否則有可能覆寫掉其他人所做的更改)。
If-Modified-Since:詢問伺服器現在正在請求的資源在某個時間以來有沒有被修改過,如果沒有,伺服器則傳回304狀态來告訴浏覽器使用浏覽器自己本地的緩存,
如果有修改過,則傳回200,并發送新的資源(當然如果資源不存在,則傳回404。)
If-None-Match:和If-Modified-Since用意差不多,不過不是根據時間來确定,而是根據一個叫ETag的東西來确定。關于etag我想在下一篇部落格介紹一下。
If-Range:告訴伺服器如果這個資源沒有更改過(根據If-Range後面給出的Etag判斷),就發送這個資源中在浏覽器缺少了的某些部分給浏覽器,
如果該資源以及被修改過,則将整個資源重新發送一份給浏覽器。
If-Unmodified-Since:詢問伺服器現在正在請求的資源在某個時刻以來是否沒有被修改過。
Max-Forwards:限制請求資訊在代理伺服器或網關中向前傳遞的次數。
Pragma:好像隻有一個值,就是:no-cache。Pragma:no-cache 與cache-control:no-cache相同,隻不過cache-control:no-cache是http1.1專門指定的,
而Pragma:no-cache可以在http1.0和1.1中使用
Proxy-Authorization:連接配接到某個代理時使用的身份認證資訊,跟Authorization頭差不多。例如:Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range:在HTTP頭中,"Range"字眼都表示“資源的byte形式資料的順序排列,并且取其某一段資料”的意思。Range頭就是表示請求資源的從某個數值到某個數值間的資料,
例如:Range: bytes=500-999 就是表示請求資源從500到999byte的資料。資料的分段下載下傳和多線程下載下傳就是利用這個實作的。
Referer:指目前請求的URL是在什麼位址引用的。例如在www.a.com/index.html頁面中點選一個指向www.b.com的超連結,
那麼,這個www.b.com的請求中的Referer就是www.a.com/index.html。通常我們見到的圖檔防盜鍊就是用這個實作的。
Upgrade:請求伺服器更新至另外一個協定,例如:Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent:通常就是使用者的浏覽器相關資訊。例如:User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0
Via:用來記錄一個請求經過了哪些代理或網關才被送到目标伺服器上。例如一個請求從浏覽器出發(假設使用http/1.0),發送給名為 SomeProxy的内部代理,
然後被轉發至www.somenet.com的公共代理(使用http/1.1),最後被轉發至目标伺服器www.someweb.com,那麼在someweb.com中收到的via 頭應該是:
via:1.0 someProxy 1.1 www.someweb.com(apache 1.1)
Warning:記錄一些警告資訊。
------------通用但非标準的HTTP頭(通常,非标準的頭域都是用“X-”開頭,例如"x-powered-by")------------
X-Requested-With:主要是用來識别ajax請求,很多javascript架構會發送這個頭域(值為XMLHttpRequest)
DNT:DO NOT TRACK的縮寫,要求伺服器程式不要跟蹤記錄使用者資訊。DNT: 1 (開啟DNT) DNT: 0 (關閉DNT)火狐,safari,IE9都支援這個頭域,
并且于2011年3月7日被送出至IETF組織實作标準化
X-Forwarded-For:記錄一個請求從用戶端出發到目标伺服器過程中經曆的代理,或者負載平衡裝置的IP。
X-Forwarded-Proto:記錄一個請求最初從浏覽器發出時候,是使用什麼協定。因為有可能當一個請求最初和反向代理通信時,是使用https,
但反向代理和伺服器通信時改變成http協定,這個時候,X-Forwarded-Proto的值應該是https
Front-End-Https:微軟使用與其負載平衡的一個頭域。
X-ATT-DeviceId:AT&A的産品中使用的頭域,不過不是很清楚用途。
------------------曾經注釋"proxy_set_header X-Forwarded-Proto https;"的一個坑-------------------
通路問卷系統https://wj.wang.com/limesurvey/index.php/admin/authentication/sa/login,登入的時候自動跳轉到了公司官網首頁。
這個問卷系統隻能通過https方式通路,http方式通路的都自動跳轉到公司官網。
原因就是因為在nginx代理層注釋了這個參數:
[root@nginx-web01 vhosts]# cat ssl-wj.conf
upstream ssl-wj {
server 192.168.1.22:10086 max_fails=3 fail_timeout=10s;
}
server {
listen 443;
server_name wj.wang.com;
ssl on;
### SSL log files ###
access_log logs/wj_access.log;
error_log logs/wj_error.log;
### SSL cert files ###
ssl_certificate ssl/wang.cer;
ssl_certificate_key ssl/wang.key;
ssl_session_timeout 5m;
location / {
proxy_pass http://ssl-wj/;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto https; //打開這個參數的注釋即可
proxy_redirect off;
}
}
=======================================================================
如下Nginx代理轉發需求:
通路http://grace.kevin.com的80端口的請求,轉發至後端192.168.10.173和192.168.10.174的80端口(這部分是靜态頁的請求)。
當通路位址中比對/leasecore/、/cms/api/、/cap/api/、/crm/api/、/cms/third/的上下文path時,轉發至192.168.10.173和192.168.10.173的8080端口(tomcat處理)
LB層的Nginx轉發配置:
===============================================================
[root@inner-lb01 vhosts]# cat grace.kevin.com.conf
upstream zl-80 {
server 192.168.10.173:80 max_fails=3 fail_timeout=15s;
server 192.168.10.174:80 max_fails=3 fail_timeout=15s;
}
upstream leasecore {
server 192.168.10.173:8080 max_fails=3 fail_timeout=15s;
server 192.168.10.174:8080 max_fails=3 fail_timeout=15s;
}
upstream cms-api {
server 192.168.10.173:8080 max_fails=3 fail_timeout=15s;
server 192.168.10.174:8080 max_fails=3 fail_timeout=15s;
}
upstream cap-api {
server 192.168.10.173:8080 max_fails=3 fail_timeout=15s;
server 192.168.10.174:8080 max_fails=3 fail_timeout=15s;
}
upstream crm-api {
server 192.168.10.173:8080 max_fails=3 fail_timeout=15s;
server 192.168.10.174:8080 max_fails=3 fail_timeout=15s;
}
upstream cms-third {
server 192.168.10.173:8080 max_fails=3 fail_timeout=15s;
server 192.168.10.174:8080 max_fails=3 fail_timeout=15s;
}
server {
listen 80;
server_name grace.kevin.com;
access_log /data/nginx/logs/grace.kevin.com-access.log main;
error_log /data/nginx/logs/grace.kevin.com-error.log;
location / {
proxy_pass http://zl-80;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
proxy_max_temp_file_size 128m;
}
location ^~ /leasecore/ {
proxy_pass http://leasecore;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
proxy_max_temp_file_size 128m;
}
location ^~ /cms/api/ {
proxy_pass http://cms-api;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
proxy_max_temp_file_size 128m;
}
location ^~ /cap/api/ {
proxy_pass http://cap-api;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
proxy_max_temp_file_size 128m;
}
location ^~ /crm/api/ {
proxy_pass http://crm-api;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
proxy_max_temp_file_size 128m;
}
location ^~ /cms/third/ {
proxy_pass http://cms-third;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
proxy_max_temp_file_size 128m;
}
}
後端192.168.10.173和192.168.10.174的nginx配置
==============================================================
[root@zl-app02 ~]# cat /data/nginx/conf/vhosts/uatzl-zpp.conf
server {
listen 80;
server_name uatzl-app02.kevin.cn;
access_log /data/nginx/logs/access.log main;
error_log /data/nginx/logs/error.log;
location / {
root /data/lease_app/dist;
index index.html index.htm;
}
}
[root@zl-app02 ~]# ps -ef|grep tomcat
app 28224 1 0 Dec13 ? 00:06:00 /data/jdk1.8.0_121/bin/java -Djava.util.logging.config.file=/data/tomcat-8.0.47/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.endorsed.dirs=/data/tomcat-8.0.47/endorsed -classpath /data/tomcat-8.0.47/bin/bootstrap.jar:/data/tomcat-8.0.47/bin/tomcat-juli.jar -Dcatalina.base=/data/tomcat-8.0.47 -Dcatalina.home=/data/tomcat-8.0.47 -Djava.io.tmpdir=/data/tomcat-8.0.47/temp org.apache.catalina.startup.Bootstrap start
root 32535 32509 0 14:38 pts/1 00:00:00 grep tomcat
順便貼個配置案例:
比如:通路http://www.kevin.com 跳轉到http://192.168.1.20:9040/portal-pc/
upstream scf_cluster {
ip_hash;
server 192.168.1.20:9020;
server 192.168.1.21:9020;
}
upstream portal_cluster {
ip_hash;
server 192.168.1.20:9040;
server 192.168.1.21:9040;
}
upstream file_cluster{
ip_hash;
server 192.168.1.20:9020;
}
upstream workflow_cluster{
ip_hash;
server 192.168.1.20:9020;
server 192.168.1.21:9020;
}
upstream batch_cluster{
server 192.168.1.20:9020;
server 192.168.1.21:9020;
}
upstream mobi_cluster{
server 192.168.1.20:8080;
}
server {
listen 80;
server_name www.kevin.com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /scf {
proxy_pass http://scf_cluster/scf;
proxy_redirect http://scf_cluster/scf http://www.kevin.com/scf;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://portal_cluster/portal-pc/;
proxy_redirect http://portal_cluster/portal-pc/ http://www.kevin.com/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /msdp-file {
proxy_pass http://file_cluster/msdp-file;
proxy_redirect http://file_cluster/msdp-file http://www.kevin.com/msdp-file;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /upload {
proxy_pass http://file_cluster/upload;
proxy_redirect http://file_cluster/upload http://www.kevin.com/upload;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /activiti-workflow-console {
proxy_pass http://workflow_cluster/activiti-workflow-console;
proxy_redirect http://workflow_cluster/activiti-workflow-console http://www.kevin.com/activiti-workflow-console;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /batch-framework-web {
proxy_pass http://batch_cluster/batch-framework-web;
proxy_redirect http://batch_cluster/batch-framework-web http://www.kevin.com/batch-framework-web;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name mobi.kevin.com;
location / {
proxy_pass http://mobi_cluster;
proxy_redirect http://mobi_cluster/ http://mobi.kevin.com/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server{
listen 80;
server_name kevin.com;
rewrite ^(.*)$ https://www.kevin.com$1 permanent;
}
*************** 當你發現自己的才華撐不起野心時,就請安靜下來學習吧!***************