我的 Web 服务器上有多个服务在不同端口上运行。这些服务通过 WebSocket 提供数据。
目前,每个服务在配置中都有自己的服务器nginx
,如下所示:
server {
listen 9031 ssl;
location / {
proxy_pass http://127.0.0.1:9002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
server {
listen 8031 ssl;
location / {
proxy_pass http://127.0.0.1:8002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
server {
listen 7031 ssl;
location / {
proxy_pass http://127.0.0.1:7002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
server {
listen 6031 ssl;
location / {
proxy_pass http://127.0.0.1:6002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
server {
listen 5031 ssl;
location / {
proxy_pass http://127.0.0.1:5002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
我还可以做这样的事情:
server {
listen 9031 ssl;
location /service1 {
proxy_pass http://127.0.0.1:9002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
location /service2 {
proxy_pass http://127.0.0.1:8002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
location /service3 {
proxy_pass http://127.0.0.1:7002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
...
}
第二种方法看起来更好一些(而且一个不错的副作用是路由器上需要配置的端口更少)。但是我现在的问题是:有没有更好的方法?在性能、稳定性等方面有什么副作用吗?推荐的方法是什么,还是说使用哪种方法都一样?
答案1
我过去曾使用过这两种方法并且都是有效的配置。
在第二种方法中,请留意您响应给客户端的 URL 中是否缺少路径。您可能需要使用重写或类似方法。有几种方法可以解决此问题。
例如,如果我请求https://www.example.com/service1
,则来自的响应http://127.0.0.1:9002
需要包含路径/service1
,以便任何后续请求都能到达预期的服务。