各位前辈, 能否帮忙看看我错误的 nginx 配置的问题是什么, 虽然我最后问 ChatGPT 得到正确的配置,但是依然不知道我自己错在哪里

2023-03-18 16:29:16 +08:00
 zzping
nginx 配置了两天了,还是配置不出,我是真的菜。
其中放弃去补了一些 nginx 的知识依然配不出,最后问的 GhatGPT 出来的。
主要问题:http 正常,https 就无法通行。(原因很多,证书的原因,代理的原因,最主要的原因应该是我配置冲突了)
---------废话补多说---上代码-----------------------
--------------------------------------------------
我:
我的域名是 www.v2ex.com,它正常解析到 120.00.00.93 ,我的 80 ,8001 端口正常开放
我有个 Django 程序,python3 manage.py runserveri 8001
我的前端文件是 root /home/www/dist;
现在需要你配置下 nginx
1 、要求能通过 v2ex.com 访问我的网站
2 、要求配置 https,其中证书文件域名都是 v2ex.com 的
    ssl_certificate /home/Nginx/1_v2ex.com_bundle.crt; 
    #请填写私钥文件的相对路径或绝对路径
    ssl_certificate_key /home/Nginx/2_v2ex.com.key; 
3 、对其中的 api 开头的都转到我的 django 程序 8001 端口
4 、请注意 https 的问题

------ChatGPT-------------------------------------
server {
    listen 80;
    listen [::]:80;
    server_name v2ex.com www.v2ex.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name v2ex.com www.v2ex.com;
    # SSL 证书配置
    ssl_certificate /home/Nginx/1_v2ex.com_bundle.crt;
    ssl_certificate_key /home/Nginx/2_v2ex.com.key;
    location / {
        root /home/www/dist;
        try_files $uri $uri/ /index.html;
    }
    location /api {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
------ChatGPT-------------------------------------
------我的错误配置-------------------------------------
    server {
        listen 80;
        server_name 120.00.000.93; #打码处理

        # 配置静态文件目录
        location / {
            root /home/www/dist;
            try_files $uri $uri/ /index.html;
        }
        
        location /api {
            proxy_pass http://120.00.000.93:8001;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
server {
    listen 443 ssl; 
    server_name www.v2ex.com;
    ssl_certificate /home/Nginx/1_v2ex.com_bundle.crt; 
    ssl_certificate_key /home/Nginx/2_v2ex.com.key; 
    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3; 
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;

  location / {
        root /home/www/dist;
        # 用于配合 browserHistory 使用
        try_files $uri $uri/ /index.html;

  }
  location /api {
      proxy_pass https://localhost:8001/;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host              $http_host;
      proxy_set_header   X-Real-IP         $remote_addr;
  }
}
------我的错误配置-------------------------------------
1138 次点击
所在节点    问与答
10 条回复
shubiao
2023-03-18 16:40:26 +08:00
chat-gpt, 这么强?!!!!
这比人脑的知识储备大无数倍,还能听懂人话,还能给出正确的答案
SenLief
2023-03-18 16:47:40 +08:00
proxy_pass https://localhost:8001/;
documentzhangx66
2023-03-18 16:51:42 +08:00
@shubiao

ChatGPT 只是个语言模型,没有分析与验错能力。它会经常编一些错误结论,一脸正经地回答给你。
documentzhangx66
2023-03-18 16:53:29 +08:00
楼主这种问题,主流的处理方法是,先去 nginx 官网,把示例配置文件扒下来跑。

成功后,再逐行修改为你需要的配置,每改一行,就重启服务,看看有没有错误。

遇到错误,去翻日志。

这种方法对于处理复杂配置文件,有奇效。
zhangyichent
2023-03-18 17:03:15 +08:00
@documentzhangx66 GPT-4 已经有了长足进步,去试试看吧,真的很可怕
hymzhek
2023-03-18 17:11:09 +08:00
80 写个跳转到 443 443 只写一次反代配置就行了
hymzhek
2023-03-18 17:11:31 +08:00
proxy_pass https://localhost:8001/;
”httpS“
zzping
2023-03-18 17:44:15 +08:00
@documentzhangx66 谢谢,我一直在逐行调试自己的代码,没想到您这种方式调试,晚上再试试
zzping
2023-03-18 17:55:16 +08:00
@hymzhek 我能明白你意思了,谢谢
bjzhush
2023-03-19 09:16:00 +08:00
逐行调试是错误的方法,因为 Nginx 配置的最小单位是块

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/925099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX