secret125 2024-02-28 11:25 采纳率: 33.3%
浏览 15
已结题

flask+uWSGI + nginx +vue3

在配置flask+uWSGI + nginx +vue3项目时出错
vue3导出dist后,使用nginx代理

nginx配置-vue

```c++

    server {
        listen       80; #指定服务器监听的端口号。
        server_name  xty032.cn; #指定服务器的域名。
        server_name  localhost; #指定服务器的域名。
        server_name  39.101.189.114;
        #charset koi8-r;

        #access_log  logs/host.access.log  main; 定义请求的处理位置。
        # location / {
        #     root   html;
        #     index  index.html index.htm;
        # }
        location / {
            # proxy_pass   http://front_pool;
            root   /var/www/html; #//网页地址
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;#当用户刷新页面时,Nginx会先检查当前URL是否存在,如果不存在,就会尝试访问index.html,从而可以正常显示页面。
            # proxy_pass  http://localhost:5000;
        }

        error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

配置nginx-flask后端地址转发
```bash
server {
        listen       8800; #指定服务器监听的端口号。
        server_name  127.0.0.1; #指定服务器的域名。
        server_name  localhost; #指定服务器的域名。
        server_name  39.101.175.114;
        #charset koi8-r;
        client_max_body_size 75M;
        #access_log  logs/host.access.log  main; 定义请求的处理位置。
        # location / {
        #     root   html;
        #     index  index.html index.htm;
        # }
        location / {
        proxy_pass http://127.0.0.1:8900;
        # include uwsgi_params;
        # uwsgi_pass 127.0.0.1:8900; #//转接到这个端口
        # uwsgi_param UWSGI_PYTHON /var/www/back/env/bin/python3;  # python路径
        # uwsgi_param UWSGI_CHDIR /var/www/back;         # 项目根目录
        # uwsgi_param UWSGI_SCRIPT main:app;           # 项目的主程序,比如你主程序文件名my_project_test.py,文件中app = Flask(__name__),那么这里就填my_project_test:app 
    }

    }

main。py


app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here'
CORS(app,supports_credentials=True)#本地运行不设置
@app.route(rule='/test', methods=['get'])
def test():
    return'成功'
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0',port=8800) #ipv4

然后使用uwsgi给flask做服务 (main.py 内 app为其名称 有get访问的测试端口/test)

[uwsgi]

http=127.0.0.1:8900
# 项目路径
callable=app

chdir = /var/www/back/
home=/var/www/back/
wsgi-file = /var/www/back/main.py
# 主进程
master = true
# 指定工作进程
processes = 4
# 每个工作进程2个线程
threads = 1
# 允许在请求中开启新线程
enable-threads=true
# 指后台启动  日志输出的地方
logto = /var/www/back/log/uwsgi.log
log-maxsize = 102400
# 保存主进程进程号
pidfile = /var/www/back/log/pid_fuwsgi.pid
# 虚拟环境路径
virtualenv = /var/www/back/env
#static-map = /static=/home/your_project/static
#不记录request日志,只记录错误日志
disable-logging = true
buffer-size = 65536
# 设置工作进程使用虚拟内存超过N MB就回收重启
reload-on-as = 1024
# 设置工作进程使用物理内存超过N MB就回收重启
reload-on-rss = 1024
#evil-reload-on-as = 512
#evil-reload-on-rss = 512
# 设置工作进程每处理N个进程就会被回收重启
max-requests = 1000
# worker进程工作时长
max-worker-lifetime = 3600
# 设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒)
worker-reload-mercy = 60
# 配置django的环境配置文件
#; env = DJANGO_SETTINGS_MODULE=your_module.settings_dev

测试 curl 127.0.0.1:8900/test 正常 uwsgi正常运行,
测试 curl 127.0.0.1:8800/test nginx转发成功
测试 直接访问域名 39.101.189.114 ,看vue前端正常,
直接访问域名 39.101.189.114:8800/test 显示测试信息,正常
但vue访问后端地址127.0.0.1:8800失败,线下本地运行正常
报错信息

img

  • 写回答

20条回答 默认 最新

  • 我是Roger 2024-02-28 13:44
    关注

    从你的描述看:

    测试 curl 127.0.0.1:8900/test 正常 uwsgi正常运行,
    测试 curl 127.0.0.1:8800/test nginx转发成功
    测试 直接访问域名 39.101.189.114 ,看vue前端正常,
    直接访问域名 39.101.189.1148800/test 显示测试信息,正常
    但vue访问后端地址127.0.0.18800失败,线下本地运行正常
    

    你应该是把后端部署在服务器上吧,IP是39.101.189.114。
    加载前端代码后,发送http请求 /api到后端获取数据。

    根据你的测试,你curl应该都是在服务器上面的吧,因为接口是在服务器上的,所以直接curl没有问题。
    你curl公网IP 39.101.189.114 也没有问题,因为你的NGINX里面写了server_name是这个IP,并且你的uwsgi和flask的配置也是正确的,毕竟本地curl都没问题了。

    但是,你是在你电脑浏览器打开的网站,前端请求127.0.0.1:8800这个地址,是你本地的地址,不是你服务器的那个地址,所以访问不到。失败是正常的。

    所以,我觉得你的代码没有问题。改一下前端里的后端API地址就行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(19条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月29日
  • 创建了问题 2月28日