技术解析

Nginx 反向代理问题,求解答
0
2021-07-02 15:33:27
idczone

搭建了 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 这种访问方式,要如何配置呢?


proxy_pass 参数可能不对,建议去官方网站看下文档,

http://wangwei007.blog.51cto.com/68019/1103734

location /mesos/, 8080/,都加上 /

现成的,拿去: https://github.com/dcos/adminrouter/blob/master/nginx.master.conf

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 的路径部分

测试的时候, 可以看下不同参数对应的目标站的访问记录,这样会更清楚


```
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 ,这个问题要怎样解决?


location ~ ^/static/ {
proxy_pass http://192.168.0.2:8080;
}
这样配置就行了

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服