在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: user@example.com 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;
}

proxy_pass根据path路径转发时的"/"问题记录的更多相关文章

  1. nginx的proxy_pass路径转发规则最后带/问题

    一.location匹配路径末尾没有 / location /sta{proxy_pass http://192.168.1.1/sta;} 外面访问:http://外网IP/sta/sta1.htm ...

  2. nginx的proxy_pass路径转发规则浅析(末尾/问题)

    源地址 : https://www.zifangsky.cn/917.html 一 location匹配路径末尾没有 / 此时proxy_pass后面的路径必须拼接location的路径:   1 2 ...

  3. [转]sudo找不到命令:修改sudo的PATH路径

    sudo有时候会出现找不到命令,而明明PATH路径下包含该命令,让人疑惑.其实出现这种情况的原因,主要是因为当 sudo以管理权限执行命令的时候,linux将PATH环境变量进行了重置,当然这主要是因 ...

  4. Python之os.path路径模块中的操作方法总结

    #os.path模块主要集成了针对路径文件夹的操作功能,这里我们就来看一下Python中的os.path路径模块中的操作方法总结,需要的朋友可以参考下 解析路径路径解析依赖与os中定义的一些变量: o ...

  5. WPF 打印崩溃问题( 异常:Illegal characters in path/路径中有非法字符)

    现象: 打印时候程序直接崩溃.调试时出现下列异常. 异常信息: 中文:System.ArgumentException : 路径中有非法字符. 英文: System.ArgumentException ...

  6. linux下python解释器的sys.path路径如何添加

    一. 使用pycharm时, pycharm会自动把我们新建的每个项目都加入到sys.path路径中, 我们在使用过程中根本不涉及 项目路径的处理, 但是当项目部署到linux上时, 问题就来了, l ...

  7. Linux下修改PATH路径

    1.#PATH=$PATH:/opt/lamp/mysql/bin       使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profi ...

  8. Linux系统下修改环境变量PATH路径的三种方法

    这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...

  9. darwin转发时,摄像机在3G和4G模式下的参数设置

    darwin转发时,摄像机在3G和4G模式下的参数设置 我们转发的是摄像机的子码流,因为在不同的网络环境下,为了达到当前网络环境下最清晰,最流畅的目标,在转发前要根据使用的是3G还是4G及信号强度来自 ...

随机推荐

  1. IDEA启动maven项目

    一.安装IDEA 自行到官网下载,有条件请购买版权 地址:https://www.jetbrains.com/idea/ 二.修改快捷键(如果不是eclipse老用户请忽略这段) 左上角File→Sr ...

  2. PADS Layout VX.2.3 更改Logic符号,并更新到原理图

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 统一使用A3尺寸的原理图,如果Logic符号画得太大,就会占用过多的面积.如下图所示,电阻的两只引脚的跨度占用了4 ...

  3. WPF使用第三方字体(TTF字体)

    1.下载第三方字体文件,将以TTF结尾的文件复制到项目中 2.在App.xaml中或者你需要的地方添加资源的定义 <Application.Resources> <FontFamil ...

  4. 将本地代码备份到Github public repository

    1. 在本地代码所在的文件夹中初始化,即打开powershell,输入下面命令 git init 此时本地文件夹中会出现一个`.git`的隐藏文件夹.   2. 然后将当前的文档`commit`,在本 ...

  5. java.util.ConcurrentModificationException 记一次坑

    集合在单线程,一个循环内,有添加又删除会出现此异常. 多线程时,在不同的循环操作同一个集合,会出现此异常. 因为,集合长度发生改变时,在迭代器未结束前,迭代器的大小不会发生变化. 1.保证在同一个进程 ...

  6. MYSQL根据节点向上和向下查询所有节点

    WITH cte AS ( SELECT * ,UnitID AS level FROM UnitTable WHERE UnitID=2 UNION ALL SELECT g.*,level+1 F ...

  7. 星环大数据安全组件Guardian与hadoop自带的安全组件区别

    在进行讲解之前,先带大家学习下hadoop关于hdfs自己的安全如何实现的--------------------------- 名词: ACL-访问控制列表(Access Control List, ...

  8. 史上最全的select加锁分析(Mysql)

    引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * from table where id < ? s ...

  9. linux centos 用户权限相关总结

    linux上用户管理 以及 相应权限 查看 增加 删除用户 修改密码 用户 用户组 用户默认目录 用户shell路径 等 用户管理 相关文件 1. 查看系统有哪些用户 cat /etc/passwd ...

  10. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习5

    #include <iostream> using namespace std; const double N1=35000; const int N2=15000; const int ...