Nginx 反向代理问题,求解答

2016-08-31 18:04:26 +08:00
 imkh

搭建了 mesos+marathon 的环境,直接访问 192.168.0.2:5050 ( mesos )和 192.168.0.2:8080 ( marathon )是可以的。 但想利用另外一个 IP 实现集中访问,比如 192.168.0.99/mesos , 192.168.0.99/marathon 这种访问方式。 配置了一下,试了下面几种配置方式,但都报 404 错误,

server {
       listen 80;
       server_name 192.168.0.99;
       location /mesos {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.0.2:5050;
       }

       location /marathon {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.0.2:8080;
       }
}

或者
server {
       listen 80;
       server_name 192.168.0.99;
       location /mesos/(.) {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.0.2:5050;
       }

       location /marathon/(.) {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.0.2:8080;
       }
}
或者
server {
       listen 80;
       server_name 192.168.0.99;
       location /mesos {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.0.2:5050/;
       }

       location /marathon {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.0.2:8080/;
       }
}

实现 192.168.0.99/mesos , 192.168.0.99/marathon 这种访问方式,要如何配置呢?

2366 次点击
所在节点    Linux
8 条回复
majinjing3
2016-08-31 18:53:38 +08:00
proxy_pass 参数可能不对,建议去官方网站看下文档,
majinjing3
2016-08-31 18:56:37 +08:00
majinjing3
2016-08-31 19:06:32 +08:00
location /mesos/, 8080/,都加上 /
chenzhiwei
2016-08-31 19:10:23 +08:00
ryd994
2016-08-31 21:13:40 +08:00
server {
listen 80;
server_name 192.168.0.99;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;

location /mesos/ {
proxy_pass http://192.168.0.2:5050/;
}

location /marathon/ {
proxy_pass http://192.168.0.2:8080/;
}
}

原因:
proxy_pass 不加 / 的话,就会 pass 到 http://192.168.0.2:5050/mesos/...
proxy_pass 含路径时,会用 pass 里的路径部分,替换 location 的路径部分
akira
2016-08-31 21:35:47 +08:00
测试的时候, 可以看下不同参数对应的目标站的访问记录,这样会更清楚
imkh
2016-08-31 22:14:33 +08:00
@ryd994
```
location /marathon/ {
proxy_pass http://192.168.0.2:8080/;
}
```
marathon 这样配置会丢失静态文件,静态文件请求到了 http://192.168.0.99/static/css/mesos.css ,正确路径是 http://192.168.0.99/marathon/static/css/mesos.css ,这个问题要怎样解决?
imkh
2016-08-31 22:55:11 +08:00
@imkh
location ~ ^/static/ {
proxy_pass http://192.168.0.2:8080;
}
这样配置就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/302980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX