安装
依赖包
make 、zlib 、zlib-devel 、gcc-c++ 、libtool 、openssl 、openssl-devel 、pcre 、pcre-devel
有yum源可以直接使用yum install 命令安装
#yum install -y make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
编译安装
解压
#tar xzvf nginx-1.22.0.tar.gz
预编译
./configure --prefix=/hdfs/project/nginx --user=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_realip_module --with-stream
编译参数--prefix=/hdfs/project/nginx #指定安装路径
--user=nginx #指定安装用户
--with-http_ssl_module #启用构建将HTTPS协议支持添加到HTTP服务器的模块的功能,OpenSSL库
--with-http_gzip_static_module #支持发送.gz扩展名为的预压缩文件
--with-http_stub_status_module #提供对基本状态信息的访问
--with-http_realip_module #将客户端地址更改为在指定的标头字段中发送的地址
--with-stream #支持构建用于通用TCP / UDP代理和负载平衡的流模块--with-stream_ssl_module #流模块添加 SSL / TLS协议支持
--with-stream_realip_module #将客户端地址更改为PROXY协议标头中发送的地址
编译安装
#make && make install
环境变量
/etc/profile.d/nginx.sh
#vim /etc/profile.d/nginx.sh
NGINX_HOME=/hdfs/project/nginx
PATH=$NGINX_HOME/sbin:$PATH#chmod +x /etc/profile.d/nginx.sh
#source /etc/profile.d/nginx.sh
配置
1,全局块
影响全局指令。PID 进程文件路径,日志存放文件路径,配置文件引入,生成 worker process 数
2,events 块
影响服务器与用户的网络连接。每个进程的最大连接数,处理请求连接的事件驱动模型
3,http 块
多嵌套 server ,配置代理,缓存,日志格式定义,sendfile 传输文件,连接超时时间,单连接请求数
4,stream 块
应用层实现四层(传输层)的转发,需要与两端建立起socket连接,然后两端的数据收发进行代理转发。和 http 块同级
5,server 块
配置虚拟主机的相关参数
6,location 块
配置请求的路由,以及各种页面的处理情况
1,以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
2,以^~ 开头,表示uri以某个常规字符串开头,不是正则匹配
3,以~ 开头,表示区分大小写的正则匹配;
4,以~* 开头,表示不区分大小写的正则匹配
5,以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到先匹配普通,再匹配正则
(location =) > (location 完整路径) > (location ^~ 路径) > (location . * 正则顺序) > (location 部分起始路径) > (/)
当 location 为正则匹配且内部有 proxy_pass 指令时,proxy_pass 的指令值中不能包含无变量的字符串。修饰语“^~”不受该规则限制
location ~ /images {
proxy_pass http://127.0.0.1:8080; # 正确的指令值
proxy_pass http://127.0.0.1:8080$request_uri; # 正确的指令值
proxy_pass http://127.0.0.1:8080/image$request_uri; # 正确的指令值
proxy_pass http://127.0.0.1:8080/; # 错误的指令值
}
例1:= 精确匹配,主机后面不带任何字符串
精确匹配 / ,主机名后面不能带任何字符串
location = / {
proxy_pass http://127.0.0.1:8083; ###不带字符串
}
例2:完整路径
匹配任何以 /dba/ 开头的地址,匹配符合以后,还要继续往下搜索
注:只有后面的正则表达式没有匹配到时,这一条才会采用这一条location /dba/ {
proxy_pass http://:127.0.0.1:8083/;
}http://xxx.xxx.com/dba/xxx --> http://localhost:8083/xxx. 转发不包含url前缀dba
例3:^~ 常规字符串开头匹配.
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条
location ^~ /images/ {
proxy_pass http://:127.0.0.1:8083;
}http://xxx.xxx.com/images/xxx --> http://localhost:8083/images/xxx. 转发包含了url的前缀images
例4:~ 区分大小写的正则匹配
location ~ \.(gif|jpg|jpeg)$ {
proxy_pass http://:127.0.0.1:8083;
}
例5:~* 不区分大小写的正则匹配
location ~* \.(gif|jpg|jpeg)$ {
proxy_pass http://:127.0.0.1:8083;
}
例6:/ 通用匹配
只有其他不符合要求才能匹配到;将是最后匹配到的,匹配度最低
location / {
proxy_pass http://tomcat_servers;
}
HTTP应用层配置
worker_processes auto; ###工作进程的个数,一般与计算机的 cpu 核数一致
worker_rlimit_nofile 65535; ###指定进程可以打开的最大描述符,需要提前设置nginx启动用户的最大打开系统文件数events {
worker_connections 1024; ###单个进程最大连接数(最大连接数=连接数*进程数)
use epoll; ###使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定
}http {
include mime.types; ###文件扩展名与文件类型映射表
default_type application/octet-stream; ###默认文件类型
charset utf-8; ###默认编码log_format real_ip '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; ###变更日志格式
server_tokens off; ###隐藏版本号
sendfile on; ###开启高效文件传输模式,sendfile 指令指定 nginx 是否调用 sendfile 函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成 off。
tcp_nopush on; ###此选项允许或禁止使用socke的 TCP_CORK 的选项,此选项仅在使用 sendfile 的时候使用
tcp_nodelay on; ###防止网络阻塞
keepalive_timeout 120; ###长连接超时时间,单位是秒
client_header_buffer_size 32k; ###客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE 取得
client_body_buffer_size 1024k; ###Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中
client_max_body_size 512m; ###client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值
large_client_header_buffers 4 128k; ###客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取
gzip on; ###启用 Gizp 压缩
proxy_request_buffering off; ###启用或禁用客户端请求正文的缓冲
###FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
fastcgi_connect_timeout 300; ###指定连接到后端FastCGI的超时时间
fastcgi_send_timeout 300; ###指定向FastCGI传送请求的超时时间,这个值是已经完成两次握手后向FastCGI传送请求的超时时间
fastcgi_read_timeout 300; ###指定接收FastCGI应答的超时时间,这个值是已经完成两次握手后接收FastCGI应答的超时时间
###反向代理的一些配置
proxy_connect_timeout 300; ###nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; ###后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; ###连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 32k; ###设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; ###proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 54k; ###高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 2m; ###设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
proxy_ignore_client_abort on; #proxy_ignore_client_abort:是否开启proxy忽略客户端中断。即如果此项设置为on开启,则服务器会忽略客户端中断,一直等着代理服务执行返回。并且如果执行没有发生错误,记录的日志是200日志。如果超时则会记录504。如果设置为off,则客户端中断后服务器端nginx立即记录499日志,但要注意,此时代理端的PHP程序会依然继续执行。nginx的proxy_ignore_client_abort默认是关闭的,即请求过程中如果客户端端主动关闭请求或者客户端网络断掉,那么Nginx会记录499。所以如果不想看到499报错,可以开启。这样来说,499错误并不是一个问题,如果出现了大量的499的话,需要考虑为什么发生了这么多的客户端中断的问题
include /hdfs/project/nginx/conf/conf.d/*.conf; ###有此选项的时候启动nginx它会去conf.d/ 下面读取后缀为.conf的文件upstream tomcat_servers {
ip_hash;
server 192.168.2.14:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.2.15:8080 weight=1 max_fails=3 fail_timeout=30s;
}
###1、轮询; 2、weight权重; 3、ip_hash; 4、fair响应时间短优先分配;
###1、down表示单前的server暂时不参与负载; 2、max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误; 3、fail_timeout:max_fails次失败后,暂停的时间; 4、backup:backup 不能和ip_hash一起使用,backup 参数是指当所有非备机都宕机或者不可用的情况下,就只能使用带backup标准的备机;
server {
listen 80; ###设置监听端口
server_name www.filesec.com; ###配置访问域名
access_log /usr/local/nginx/logs/tomcat_servers.log real_ip; ###定义日志存放路径以及格式
location ~ .* {
proxy_pass http://tomcat_servers;
proxy_set_header Host $http_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 $scheme;
}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://tomcat_servers;
}location ~ .*\.(js|css)?$
{
proxy_pass http://tomcat_servers;
}###php配置
location ~ \.php$ {
root /hdfs/project/xinhu;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}###错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
root html;
}
location = /50x.html {
root html;
}}
}
TCP传输层配置
user nginx;
worker_processes auto;error_log logs/error.log;
pid nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 10240;
}
stream {log_format proxy '$proxy_protocol_addr $remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';upstream control{
server xxx:8100 weight=10;
server xxx:8100 weight=10;
}server {
listen 10050;
proxy_pass xxx:8910;
access_log logs/access-test.log proxy;
# proxy_protocol on;
}server {
listen 10060;
proxy_pass xxx:8909;
access_log logs/access-test.log real_ip;
# proxy_protocol on;
}server {
listen 10070;
access_log logs/access-test.log proxy;
proxy_pass xxx:8910;
# proxy_protocol on;
proxy_timeout 20; #超时时间
}server {
listen 10080;
access_log logs/access-test.log proxy;
proxy_pass xxx:8909;
# proxy_protocol on;
}server {
listen 10090;
access_log logs/access-test.log proxy;
proxy_pass control;
# proxy_protocol on;
}
}
平滑升级
查看nginx版本及模块信息
#nginx -V
解压安装高版本
#tar xzvf nginx-xxx.tar.gz
#cd nginx-xxx
重新编译(增加新模块)
#./configure --xxx --xxx
#make
千万不要make install
备份之前的nginx
#mv /hdfs/project/nginx/sbin/nginx /hdfs/project/nginx/sbin/nginx_bak
拷贝新编译的nginx
#cp nginx /hdfs/project/nginx/sbin/
国密
有证书
国密OpenSSL
下载链接:https://www.gmssl.cn/gmssl/down/gmssl_openssl_1.1_b7.tar.gz
解压
#tar xzfm gmssl_openssl_1.1_bxx.tar.gz -C /usr/local/
Nginx
解压
#tar xzvf nginx-xxx.tar.gz
conf文件修改
auto/lib/openssl/conf
将全部$OPENSSL/.openssl/修改为$OPENSSL/并保存
预编译
./configure --prefix=/usr/local/nginx-gmssl \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-http_v2_module \
--with-openssl="/usr/local/gmssl" \
--with-cc-opt="-I/usr/local/gmssl/include" \
--with-ld-opt="-lm"
#
./configure --prefix=/usr/local/nginx-gmssl --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-openssl="/usr/local/gmssl" --with-cc-opt="-I/usr/local/gmssl/include" --with-ld-opt="-lm"
安装
#make install
无证书
使用gmssl创建证书测试验证
GmSSL
下载链接:https://github.com/guanzhi/GmSSL
解压
#unzip GmSSL-master.zip -d /usr/local/
v2版本编译安装,建议选用此版本
#cd /usr/local/GmSSL-master/
#./config --prefix=/usr/local/gmssl
#make && make install
master3.0版本编译安装,采用cmake构建
#cd /usr/local/GmSSL-master/
#mkdir build
#cmake .. #需要安装cmake(version3.9或更高)
#make
#./config --prefix=/usr/local/gmssl
#make && make install
cmake下载地址:Index of /files
安装步骤
#tar xzvf
#./configure
#make && make install
gmssl-make编译报错
/usr/local/gmssl_cmake/GmSSL-master/src/sm9_alg.c:2240:11: 错误:‘i’重声明为没有外部链接
/usr/local/gmssl_cmake/GmSSL-master/src/sm9_alg.c:2240:2: 错误:只允许在 C99 模式下使用‘for’循环初始化声明
修改对应的文件
标记有行号
/usr/local/gmssl_cmake/GmSSL-master/src/sm9_alg.c
for (int i = 0; i < 10; i++)
改为
int i;
for (i= 0;i < 10; i++)
for (int j = 0; j < 4; j++)
改为
int j;
for (j= 0;j< 4;J++)
查看版本,验证是否安装成功
#/usr/local/gmssl/bin/gmssl version
报错
bin/gmssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
原因分析
openssl库的位置不正确导致
解决方法
1.首先确认gmssl的安装路径,我的是/usr/local/gmssl
2.应该将gmssl目录下的lib下的对应文件建立软连接
3.确认以上两点后,执行下面的命令
#ln -s /usr/local/gmssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
#ln -s /usr/local/gmssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
Nginx
编译模块
./configure --prefix=/usr/local/nginx-gmssl \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-http_v2_module \
--with-openssl="/usr/local/gmssl"
sm2证书
以下命令在哪个目录执行的就会生成到哪个目录
cd /usr/local/gmssl/ssl
CA证书
#/usr/local/gmssl/bin/gmssl ecparam -genkey -name sm2p256v1 -noout -out root.key
#/usr/local/gmssl/bin/gmssl req -new -key root.key -out root.req -subj "/C=CN/ST=GuangDong/L=GZ/O=HDLH/CN=root"
#/usr/local/gmssl/bin/gmssl x509 -req -days 3650 -sm3 -in root.req -extfile openssl.cnf -extensions v3_ca -signkey root.key -out root.crt
Server签名证书
#/usr/local/gmssl/bin/gmssl ecparam -name sm2p256v1 -genkey -noout -out server.key
#/usr/local/gmssl/bin/gmssl req -new -SM3 -key server.key -out server.csr -subj "/C=CN/ST=GuangDong/L=GZ/O=HDLH/CN=server"
#/usr/local/gmssl/bin/gmssl x509 -req -SM3 -days 3650 -in server.csr -extfile openssl.cnf -extensions v3_req -CA root.crt -CAkey root.key -set_serial 1000000001 -out server.crt
Server加密证书
#/usr/local/gmssl/bin/gmssl ecparam -name sm2p256v1 -genkey -noout -out server_en.key
#/usr/local/gmssl/bin/gmssl req -new -SM3 -key server_en.key -out server1.csr -subj "/C=CN/ST=GuangDong/L=GZ/O=HDLH/CN=server_en"
#/usr/local/gmssl/bin/gmssl x509 -req -SM3 -days 3650 -in server1.csr -extfile openssl.cnf -extensions v3enc_req -CA root.crt -CAkey root.key -set_serial 1000002001 -out server_en.crt
客户端签名证书
#/usr/local/gmssl/bin/gmssl ecparam -genkey -name sm2p256v1 -noout -out client.key
#/usr/local/gmssl/bin/gmssl req -new -key client.key -out client.req -subj "/C=CN/ST=GuangDong/L=GZ/O=HDLH/CN=client"
#/usr/local/gmssl/bin/gmssl x509 -req -SM3 -days 3650 -in client.req -extfile openssl.cnf -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -out client.crt
客户端加密证书
#/usr/local/gmssl/bin/gmssl ecparam -genkey -name sm2p256v1 -noout -out client_en.key
#/usr/local/gmssl/bin/gmssl req -new -key client_en.key -out client_en.req -subj "/C=CN/ST=GuangDong/L=GZ/O=HDLH/CN=client"
#/usr/local/gmssl/bin/gmssl x509 -req -SM3 -days 3650 -in client_en.req -CA root.crt -extfile openssl.cnf -extensions v3enc_req -CAkey root.key -CAcreateserial -out client_en.crt
配置文件
证书排序:签名在前,加密后,CA证书最后
server {
listen 443 ssl;
server_name localhost;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3 GMTLS;
ssl_certificate ../gmssl/server.crt; #server签名证书
ssl_certificate_key ../gmssl/server.key;
ssl_certificate ../gmssl/server_en.crt; #server加密证书
ssl_certificate_key ../gmssl/server_en.key;
ssl_certificate ../gmssl/root.crt; #CA证书
ssl_certificate_key ../gmssl/root.key;
ssl_certificate ../ssl/server.crt;
ssl_certificate_key ../ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-SM2-WITH-SMS4-GCM-SM3:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-SM2-WITH-SMS4-SHA256:ECDHE-SM2-WITH-SMS4-SM3:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:RSA-PSK-AES256-GCM-SHA384:DHE-PSK-AES256-GCM-SHA384:RSA-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20-POLY1305:AES256-GCM-SHA384:PSK-AES256-GCM-SHA384:PSK-CHACHA20-POLY1305:RSA-PSK-AES128-GCM-SHA256:DHE-PSK-AES128-GCM-SHA256:AES128-GCM-SHA256:PSK-AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:ECDHE-PSK-AES256-CBC-SHA384:ECDHE-PSK-AES256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:RSA-PSK-AES256-CBC-SHA384:DHE-PSK-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA:DHE-PSK-AES256-CBC-SHA:AES256-SHA:PSK-AES256-CBC-SHA384:PSK-AES256-CBC-SHA:ECDHE-PSK-AES128-CBC-SHA256:ECDHE-PSK-AES128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:RSA-PSK-AES128-CBC-SHA256:DHE-PSK-AES128-CBC-SHA256:RSA-PSK-AES128-CBC-SHA:DHE-PSK-AES128-CBC-SHA:SM9-WITH-SMS4-SM3:SM9DHE-WITH-SMS4-SM3:SM2-WITH-SMS4-SM3:SM2DHE-WITH-SMS4-SM3:AES128-SHA:RSA-WITH-SMS4-SHA1:RSA-WITH-SMS4-SM3:PSK-AES128-CBC-SHA256:PSK-AES128-CBC-SHA;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
启动验证
#nginx -t
#nginx
其他参考内容
Nginx作为反向代理到Tomcat应用时,session丢失的问题
1、如果只是host、端口转换,则session不会丢失。例如:
location /testwx {
proxy_pass http://127.0.0.1:8080/testwx;
}
通过浏览器访问 http://127.0.0.1/testwx时,浏览器的cookie内有jsessionid。再次访问时,浏览器会发送当前的cookie。
2、如果路径也变化了,则需要设置cookie的路径转换,nginx.conf的配置如下
location /testwx {
proxy_pass http://127.0.0.1:8080/wx;
proxy_cookie_path /wx /testwx;#这里的路径要注意对应关系
}
可以将wx的cookie输出到testwx上,Tomcat的session正常了