这个问题可能会被问很多次,我一直在看书,但还是得不到我想要的。
我有一个应用程序在 172.17.1.10:8080/myapp
中运行 我想设置 nginx 反向代理以仅使用 sub.domain.com
访问该应用程序,隐藏地址栏中的“myapp”。
我当前的设置是:
server{
listen 80;
server_name sub.domain.com;
location /myapp {
rewrite ^/myapp(.*) /$1 break;
proxy_pass http://172.17.1.10:8080;
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;
include /etc/nginx/proxy_params;
}
}
但我一直在用 sub.domain.com
查看 Nginx 索引页面,用 sub.domain.com/myapp
查看 tomcat 索引页面...我是什么不见了?
最佳答案
看起来你甚至不需要重写这种情况,这应该足够了:
更新位置:
server{
listen 80;
server_name sub.domain.com;
location / {
proxy_pass http://172.17.1.10:8080/myapp/;
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;
include /etc/nginx/proxy_params;
}
这是一个服务器模拟你的后端的例子,
你的 172.17.1.10:8080 将是我的 localhost:8088:
server {
listen 8088;
location /myapp {
# if the "login" request param = true, will simulate a redirect to a login page to proxy;
if ($arg_login = "true" ){
return 301 http://sub.domain.com/login;
}
#otherwise return normal content
return 200 "$request_uri OK";
}
#Simulated login page
location /myapp/login {
echo "Login page: Provide credentials!";
}
所以,(使用浏览器)如果我请求这个:http://sub.domain.com/api/test
我会得到:
/myapp/api/test OK
而如果我请求:http://sub.domain.com/api/test?login=true
我会得到:
Login page: Provide credentials!
关于tomcat - nginx 重写以隐藏应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339118/