使用nginx的rewrite实现代理指定目录命令方法
使用nginx代理Tomcat,Tomcat发布web的时候通常都是带着项目名称的,
比如项目名称为“aven",那么发布之后就需要使用:http://127.0.0.1:8080/aven 来访问,
如何让别人直接通过IP即:http://127.0.0.1 来访问呢?
可以使用rewrite命令来实现这个功能,配置文件如下:
server {
listen 80;
server_name localhost;
location / {
rewrite ^/(.*)$ /aven/$1 last;
}
location ~* ^/aven/.*$ {
proxy_pass http://127.0.0.1:8080;
}
}
这种配置方法在使用中还是有一些问题,
1、Url中还是会看到aven这个目录;
2、Session丢失了。
目前还没找到好的解决方案。
2017-03-30更新
之前的方式出现了Session丢失的问题,一直没找到解决方案;
今天又有小伙伴问到,来更新一下。
Session丢失应该是 rewrite 的时候 没有设置 header 的原因。
server {
listen 80;
server_name localhost;
access_log logs/quancha.access.log main;
error_log logs/quancha.error.log;
root html;
index index.html index.htm index.php;
## send request back to apache ##
location / {
proxy_pass http://127.0.0.1:8080/aven;
#Proxy Settings
proxy_redirect off;
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}