Post

Nginx

Nginx

Nginx 配置文件的位置


Nginx 的主配置文件通常位于以下几个常见的路径之一,这取决于您的操作系统和 Nginx 安装方式:

  • Debian/Ubuntu: /etc/nginx/nginx.conf/etc/nginx/sites-available/ 中的虚拟主机文件。
  • CentOS/Red Hat: /etc/nginx/nginx.conf/etc/nginx/conf.d/ 中的虚拟主机文件。
  • MacOS/Homebrew: /usr/local/etc/nginx/nginx.conf

反向代理配置


1
2
3
4
5
6
7
8
9
10
11
server {
    listen 80;
    server_name site_url;  域名配置

    location / {
        proxy_pass http://localhost:port; 需要转发的端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

创建站点连接:
sudo ln -s /etc/nginx/sites-available/zh17.tech /etc/nginx/sites-enabled/zh17.tech

重启nginx:
sudo systemctl restart nginx

ws 请求 变成 wss 请求

WebSocket 请求在通过域名时变成了 wss://zh17.tech/gpt/queue/join,而在直接使用 IP 地址时则是 ws://142.171.204.194:1234/gpt/queue/join。这个问题通常与 Nginx 的配置有关。

以下是一些步骤和配置示例,帮助你解决这个问题:

1. Nginx 配置

确保你的 Nginx 配置正确处理 WebSocket 连接。以下是一个基本的 Nginx 配置示例,适用于 WebSocket:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
    listen 80;
    server_name zh17.tech;

    location / {
        proxy_pass http://127.0.0.1:1234;  # 将请求转发到你的 Python Web 服务
        proxy_http_version 1.1;  # 使用 HTTP/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;  # 设置真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发 IP
        proxy_set_header X-Forwarded-Proto $scheme;  # 转发协议
    }
}

2. 确保使用 HTTPS

如果你希望使用 wss://(安全的 WebSocket),则需要确保你的 Nginx 服务器配置了 SSL/TLS。你可以使用 Let’s Encrypt 免费获取 SSL 证书。配置 HTTPS 的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
    listen 80;
    server_name zh17.tech;
    return 301 https://$host$request_uri;  # 将所有 HTTP 请求重定向到 HTTPS
}

server {
    listen 443 ssl;
    server_name zh17.tech;

    ssl_certificate /path/to/fullchain.pem;  # SSL 证书路径
    ssl_certificate_key /path/to/privkey.pem;  # SSL 密钥路径

    location / {
        proxy_pass http://127.0.0.1:1234;
        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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

nginx 转发 github pages

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
server{
    listen 80;
    server_name your.blog.com;
    return 301 https://your.blog.com$request_uri;
}

server{
    listen 443 ssl http2;
    server_name your.blog.com;

    ssl_certificate   /opt/cert/sslfile.pem;
    ssl_certificate_key  /opt/cert/sslfile.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_redirect off;
        proxy_set_header Host yourblog.github.io;    # 填写 Github Pages 的地址。
        proxy_set_header X-Host yourblog.github.io;  # 填写 Github Pages 的地址。
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Cache pages.
        proxy_cache_valid 200 206 304 301 302 1d;    # 配置缓存过期时间。
        proxy_cache_valid any 1d;
        proxy_cache_key $uri;

        proxy_pass https://yourblog.github.io;       # 填写 Github Pages 的地址。
    }
}

This post is licensed under CC BY 4.0 by the author.