记录一次 nginx + flask + uwsgi + supervisor 404问题

场景: 微信公众号开发,服务器配置的是一个子域名https://xxx.com/xxxx/wxnotify/然后在nginx中xxxx已经设置为指向服务器的端口8080,之前的服务器代码是java,上手成本高,所以还是用我熟悉的python。将我的部分功能的uri设为:https://xxx.com/xxxx/wxnotify/menu 配置nginx的时候upstream到uwsgi设置的8001端口,在配置环境的时候nginx配置时遇到了麻烦,一直404,折腾了一个下午,终于解决,记录如下,希望能够帮到遇到同样问题的同学:
首先 配置nginx,如下:

  server {
      listen  443;
      server_name XXX.XXX.XXX; #公网地址
    
      location / {
       }
      location /xxxx/wxnotify/menu {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:8001;  # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
        uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录
        uwsgi_param UWSGI_CHDIR  /home/www/my_flask; # 指向网站根目录
        uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
      }
      location /xxxx/ {
        ....
      }
    }

location根据最长匹配原则,将发来的https://xxx.com/xxxx/wxnotify/menu转到8801端口,注意这边uwsgi_pass写的是127.0.0.1:8001 是没有带“/”的,根据 https://www.jianshu.com/p/b8f345376b68 中可以看到加/与不加/的区别,我折腾了半天有大部分原因是没有注意到这个知识点,导致一直不能出坑。
正式因为127.0.0.1:8001没有带"/",因此https://xxx.com/xxxx/wxnotify/menu 对应的是https://127.0.0.1:8001/xxxx/wxnotify/menu,而我在代码中没有加/xxxx/wxnotify/menu前缀,导致一直404,最终解决方法:

app.register_blueprint(api_blueprint, url_prefix='//xxxx/wxnotify/menu')

解决问题

你可能感兴趣的:(记录一次 nginx + flask + uwsgi + supervisor 404问题)