nginx整合gateway转发wss请求

重点:

1、在http中增加 

map $http_upgrade $connection_upgrade {
      default upgrade;
      '' close;
    }

2、在server中增加

  location/wss/{
            proxy_pass http://172.21.0.17:60001/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_connect_timeout 60s;
            proxy_read_timeout 7200s;
            proxy_send_timeout 60s;
        }

配好以后,请求websocket路径:

wss://api-dev.mycompany.com/wss/chatwebsocket/chat/UhuGrbOGOqWx0zwRyK1YnBwy8Dr0Wo5nvNPoyCWJFilAMYVDLYdFwnkDZvmYfdiwX6nimKfSji0PikkNtRUSRj5TPNL1n6FZpP3eiIEDxGZGsxtAQf2vrfQ8nffVZWEF

 

或者:https://api-dev.mycompany.com/wss/chatwebsocket/https://api-dev.mycompany.com/ws/chat/UhuGrbOGOqWx0zwRyK1YnBwy8Dr0Wo5nvNPoyCWJFilAMYVDLYdFwnkDZvmYfdiwX6nimKfSji0PikkNtRUSRj5TPNL1n6FZpP3eiIEDxGZGsxtAQf2vrfQ8nffVZWEF

具体nginx.conf如下:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
   map $http_upgrade $connection_upgrade {
      default upgrade;
      '' close;
    }

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    server {
	listen 443 ssl;
	server_name www.mycompany.com;
	root /var/www/mycompany-www;
	include /etc/nginx/default.d/*.conf;

	location / {
		root /var/www/mycompany-www;
		index index.html;
	
	}
	
	ssl_certificate /var/ssl_keys/www/www.mycompany.com_bundle.crt;
	ssl_certificate_key /var/ssl_keys/www/www.mycompany.com.key;
	ssl_session_timeout 5s;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
	ssl_prefer_server_ciphers on;


	error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
	gzip on;
	    gzip_min_length 1k;
	    gzip_comp_level 9;
	    gzip_vary on;
	    gzip_disable "MSIE [1-6]\.";
	    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

	
    }
    

    server {
        listen 443 ssl;
        server_name api-dev.mycompany.com;
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://172.0.0.17:60001/;
		proxy_set_header HOST $host;
		proxy_max_temp_file_size 0k;
		proxy_buffers 256 4k;
		proxy_connect_timeout 300;
		proxy_send_timeout 300;
		proxy_read_timeout 300;		
        }

        location /ws/{
            proxy_pass http://172.0.0.17:60001/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_connect_timeout 60s;
            proxy_read_timeout 7200s;
            proxy_send_timeout 60s;
        }
        ssl_certificate /var/ssl_keys/api-dev/api-dev.mycompany.com_bundle.crt;
        ssl_certificate_key /var/ssl_keys/api-dev/api-dev.mycompany.com.key;
        ssl_session_timeout 5s;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;


        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }



# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Nginx代理Django并转发所有请求头你可以在Nginx配置文件中进行如下设置: 1. 打开Nginx的配置文件,通常是位于`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`。 2. 在`server`块中添加以下配置: ``` server { listen 80; server_name your_domain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 如果希望转发所有请求头,可以使用以下配置 proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Port $server_port; } } ``` 在上述配置中,`proxy_pass`指定了Django应用程序运行的地址和端口(这里假设Django应用程序在本地运行的端口为8000)。 下面是转发请求头的配置部分: ``` proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Scheme $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Port $server_port; ``` 这些配置将会把原始请求的主机、协议和端口信息转发给Django应用程序。 3. 保存并关闭配置文件。 4. 重新加载Nginx配置,命令为`sudo systemctl reload nginx`(具体命令可能因操作系统和Nginx版本而异)。 现在,当有请求经过Nginx时,Nginx将会代理到Django应用程序,并将所有请求头信息都正确地转发给Django。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值