我是 nginx 的新手,不熟悉它如何处理定位,希望能够解决我遇到的问题:
在同一台服务器上,我有一个 Apache Web 服务器和一个 websocket 服务器。Apache 在端口 8080 上工作,而 websocket 服务器在端口 9090 上工作。我想在前面放置一个 nginx 代理,以便 http/https 流量被代理到 apache,而 ws/wss 流量被代理到 websocket 服务器。
我有以下配置:
location /ws* {
proxy_pass ws://127.0.0.1:9090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
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:8080;
}
这工作正常,但我面临的问题是所有 ws* 请求也会重定向到 apache 服务器,而我只希望它们重定向到 ws 服务器。我读到 nginx 只采用第一个匹配的位置,但这在我的情况下似乎是错误的。
所以问题是我如何仅将 http(s) 流量代理到 apache 以及仅将 ws(s) 流量代理到 web 套接字服务器?
答案1
您拥有的位置语法似乎与您想要做的不一样。
如果您尝试使用位置 URL 执行正则表达式,正确的语法是:
location ~ /ws.* {
如果您尝试在 ws 目录下执行所有操作,则应该:
location /ws/ {
您可能需要查看文档以获取有关位置的更多信息。http://nginx.org/en/docs/http/ngx_http_core_module.html#location