场景: 微信公众号开发,服务器配置的是一个子域名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')
解决问题
网友评论