V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zzping
V2EX  ›  问与答

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

  •  
  •   zzping · 2023-03-18 16:29:16 +08:00 · 933 次点击
    这是一个创建于 376 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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;
      }
    }
    ------我的错误配置-------------------------------------
    
    10 条回复    2023-03-19 09:16:00 +08:00
    shubiao
        1
    shubiao  
       2023-03-18 16:40:26 +08:00
    chat-gpt, 这么强?!!!!
    这比人脑的知识储备大无数倍,还能听懂人话,还能给出正确的答案
    SenLief
        2
    SenLief  
       2023-03-18 16:47:40 +08:00
    proxy_pass https://localhost:8001/;
    documentzhangx66
        3
    documentzhangx66  
       2023-03-18 16:51:42 +08:00
    @shubiao

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

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

    遇到错误,去翻日志。

    这种方法对于处理复杂配置文件,有奇效。
    zhangyichent
        5
    zhangyichent  
       2023-03-18 17:03:15 +08:00
    @documentzhangx66 GPT-4 已经有了长足进步,去试试看吧,真的很可怕
    hymzhek
        6
    hymzhek  
       2023-03-18 17:11:09 +08:00
    80 写个跳转到 443 443 只写一次反代配置就行了
    hymzhek
        7
    hymzhek  
       2023-03-18 17:11:31 +08:00
    proxy_pass https://localhost:8001/;
    ”httpS“
    zzping
        8
    zzping  
    OP
       2023-03-18 17:44:15 +08:00
    @documentzhangx66 谢谢,我一直在逐行调试自己的代码,没想到您这种方式调试,晚上再试试
    zzping
        9
    zzping  
    OP
       2023-03-18 17:55:16 +08:00
    @hymzhek 我能明白你意思了,谢谢
    bjzhush
        10
    bjzhush  
       2023-03-19 09:16:00 +08:00
    逐行调试是错误的方法,因为 Nginx 配置的最小单位是块
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   954 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:11 · PVG 05:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.