我目前在 nginx 中有这样的反向代理配置
server {
listen 8888 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri @proxy;
}
location = / {
try_files $uri @proxy2;
}
location = /redirect.html {
try_files $uri @proxy2;
}
location ~ /user/(.*)$ {
try_files index.html @proxy2;
}
location @proxy2 {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:6079;
max_ranges 0;
}
location @proxy {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:6081;
max_ranges 0;
}
location = /websockify {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:6081;
}
}
我的问题是,我有一个 类型的 URL http://example.com:8888/user/username
,我需要将其重定向到localhost:6079
。不幸的是,监听端口 6079 的 URL 需要没有/user/username
部分的 URL。据我了解,当我尝试使用此配置时,我得到了一个 flask 生成的 404(端口 6079 上的应用程序是一个 flask 应用程序)。整个下午我几乎尝试了所有方法,包括重写 URL、对实际 URL 进行硬编码以及 nginx 文档中的其他技巧,但我找不到可行的解决方案。
观察一下,如果我直接连接到http://本地主机:6079/该应用程序运行良好,所以它似乎确实是这个 nginx 设置。
编辑:
我尝试按照建议进行修改,并在 proxy2 proxy_pass 行中添加 /,但它会抱怨,正如这里所解释的那样
至于日志,我没有看到任何意外,除非我连接到 localhost:8888/user/username 它会显示 404,如果我连接到 localhost:8888 我会看到 flask 应用程序。
请记住,nginx 位于 docker 镜像上,但我从主机进行浏览,因此 nginx 中的 127.0.0.1 是 docker 实例,当我浏览 127.0.0.1 时,它是主机,端口通过我启动容器时设置的网桥。
编辑2
日志没有说明太多信息。
172.17.42.1 - - [10/May/2016:22:14:05 +0000] "GET /user/sborini/redirect.html?width=1375&height=695 HTTP/1.1" 200 212 "http://localhost:8888/user/sborini/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0"
172.17.42.1 - - [10/May/2016:22:14:05 +0000] "GET /user/sborini/vnc_auto.html HTTP/1.1" 404 166 "http://localhost:8888/user/sborini/redirect.html?width=1375&height=695" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0"
172.17.42.1 - - [10/May/2016:22:14:57 +0000] "GET /user/sborini/vnc_auto.html HTTP/1.1" 404 209 "http://localhost:8888/user/sborini/redirect.html?width=1375&height=695" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0"
172.17.42.1 - - [10/May/2016:22:14:58 +0000] "GET /user/sborini/vnc_auto.html HTTP/1.1" 404 209 "http://localhost:8888/user/sborini/redirect.html?width=1375&height=695" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0"
172.17.42.1 - - [10/May/2016:22:18:59 +0000] "GET / HTTP/1.1" 200 454 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0"
看看如果我连接到普通/
条目我会得到什么无论如何,我尝试了一个简化的情况:
server {
listen 8888 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
location = /user/sborini/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5555;
max_ranges 0;
}
}
还有一个 netcat 在监听 5555。我得到一个坏网关。正在调查。