问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

轻松实现Nginx的HTTP与WebSocket转发:你的网站需要这个

创作时间:
作者:
@小白创作中心

轻松实现Nginx的HTTP与WebSocket转发:你的网站需要这个

引用
CSDN
1.
https://blog.csdn.net/t610654893/article/details/136804418

对于初学者来说,配置Nginx可能有一定的难度。幸运的是,我们可以使用一个自动配置Nginx的网站来辅助我们:

https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN

该网站提供了傻瓜式的点击配置,配置完成后可以下载一个非常详尽的Nginx配置文件。

Nginx配置文件位置

在Nginx中配置HTTP和WebSocket转发时,配置文件通常位于/etc/nginx/nginx.conf/etc/nginx/sites-available/目录下的某个文件。

配置要点

SSL证书配置

证书配置取决于你是否使用HTTP还是HTTPS,以确保数据在客户端和服务器之间传输时的安全性。

SERVER块配置

server块是一个配置指令块,它允许你定义如何处理来自特定域名的请求。可以有多个server块,每个server块通常对应一个唯一的域名或IP地址加端口组合。

HTTP转发配置

对于HTTP请求,你可以使用proxy_pass指令将请求转发到你的应用服务器。

server {
    listen 80;
    server_name example.com;  # 你的域名
    location / {
        proxy_pass http://backend;  # backend 是你的应用服务器的 upstream 名称
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

在上面的配置中,backend是一个upstream指令定义的服务器组,你需要确保在Nginx配置文件中定义了这个upstream

WebSocket转发配置

对于WebSocket请求,除了使用proxy_pass指令外,还需要添加一些额外的配置来支持WebSocket通信。

server {
    listen 80;
    server_name example.com;  # 你的域名
    location /ws/ {
        proxy_pass http://websocket_backend;  # websocket_backend 是你的 WebSocket 服务器的 upstream 名称
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

类似于HTTP转发,websocket_backend应该是一个upstream指令定义的服务器组。上面的配置中,proxy_http_version 1.1指定了使用HTTP/1.1,而proxy_set_header Upgrade $http_upgradeproxy_set_header Connection "upgrade"是WebSocket协议升级所需的标头。

location配置详解

location /表示匹配所有请求,而location /ws/表示匹配以/ws/开头的请求。如果你配置了WebSocket转发但无法正常工作,可能是因为API路径配置不正确。

例如,如果你的WebSocket API路径是/api/ws/back/getInfo,那么需要在配置中明确指定这个路径。

实例配置

以下是一个简单的测试环境配置示例,没有配置SSL HTTPS:

# 匹配 /api/exchange/**
location ~/exchange/ {
    proxy_pass http://ip地址:5252;
}
# 匹配 /api/manager/**
location ~/manager/ {
    proxy_pass http://ip地址:5253;
}
# 匹配 swagger
location ~/doc.html {
    proxy_pass http://ip地址;
}
# 匹配 swagger
location ~/*.css {
    proxy_pass http://ip地址;
}
# 匹配 swagger
location ~/*.js {
    proxy_pass http://ip地址;
}
# 匹配 swagger
location ~/swagger-resources {
    proxy_pass http://ip地址;
}
# 匹配 /ws/**
location ^~ /ws {
    # 后台准备的websocket地址端口
    proxy_pass http://ip地址:5353;
    # 其他参数都一样
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
    proxy_set_header  Host $http_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-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

Nginx正则匹配规则

了解Nginx内部正则匹配规则和优先级顺序非常重要:

1. location =    # 精准匹配
2. location ^~   # 带参前缀匹配
3. location ~    # 正则匹配(区分大小写)
4. location ~*   # 正则匹配(不区分大小写)
5. location /a   # 普通前缀匹配,优先级低于带参数前缀匹配。
6. location /    # 任何没有匹配成功的,都会匹配这里处理

配置生效

完成配置后,不要忘记重启Nginx服务以使配置生效:

sudo systemctl restart nginx
# 或者
nginx -s reload

确保你的应用服务器能够处理WebSocket连接,并且防火墙设置允许相应的端口通信。此外,如果你的WebSocket服务运行在不同的端口或使用HTTPS,还需要相应地修改Nginx配置。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号