在nginx多位置块中代理传递WebSocket

3phpmpom  于 2023-11-17  发布在  Nginx
关注(0)|答案(1)|浏览(181)

我有3个服务在我的机器上运行。我想用nginx管理它们:service-1运行在端口6000上,service-2运行在端口6002上,service-3是一个运行在端口6003上的WebSocket。
在我的nginx.conf文件中:

  1. server {
  2. listen [::]:80; # Listen on IPv6
  3. listen 80;
  4. server_name domain.com;
  5. location /service-1/ {
  6. proxy_pass http://localhost:6001;
  7. }
  8. location /service-2/ {
  9. proxy_pass http://localhost:6002;
  10. }
  11. location /service-3/ {
  12. proxy_pass http://localhost:65000;
  13. proxy_http_version 1.1;
  14. proxy_set_header Upgrade $http_upgrade;
  15. proxy_set_header Connection "Upgrade";
  16. }
  17. }

字符串
问题是,如果我使用“/”作为WebSocket代理传递,那么连接就建立了。但是使用不同的位置块并不能建立连接。
举例来说:

  1. ###### THIS WORKS ######
  2. server {
  3. listen [::]:80; # Listen on IPv6
  4. listen 80;
  5. server_name domain.com;
  6. location / {
  7. proxy_pass http://localhost:65000;
  8. proxy_http_version 1.1;
  9. proxy_set_header Upgrade $http_upgrade;
  10. proxy_set_header Connection "Upgrade";
  11. }
  12. }
  13. ###### THIS DOESN'T WORK ######
  14. server {
  15. listen [::]:80; # Listen on IPv6
  16. listen 80;
  17. server_name domain.com;
  18. location /service-3/ {
  19. proxy_pass http://localhost:65000;
  20. proxy_http_version 1.1;
  21. proxy_set_header Upgrade $http_upgrade;
  22. proxy_set_header Connection "Upgrade";
  23. }
  24. }


注意:我正在使用Cloudflare CDN来管理我的域和子域。

wtlkbnrh

wtlkbnrh1#

我认为问题是你错过了代理部分的请求部分。

  1. location /service-3/ {
  2. proxy_pass http://localhost:65000;

字符串
应该看起来像

  1. location /service-3/ {
  2. proxy_pass http://localhost:65000/service-3/;

相关问题