欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

nginx+uwsgi部署实践和问题解决(一)

程序员文章站 2022-09-30 13:59:19
部署情景描述: 这周我的外包项目进入了部署阶段。这个项目采用了vue前端+django后端, vue前端打包成静态文件,通过nginx服务器负责vue静态文件请求的处理和反馈。django项...

部署情景描述:

这周我的外包项目进入了部署阶段。这个项目采用了vue前端+django后端, vue前端打包成静态文件,通过nginx服务器负责vue静态文件请求的处理和反馈。django项目采用目前最普遍的uWSGI服务器运行,再通过nginx反向代理vue框架对后端的请求。

部署使用的服务器是阿里云ecs云服务器,配置是2核4G,1M带宽。

location /{
    root /home/temp; # my dist directory
    index index.html;
    try_files $uri $uri/ /index.html = 404;
}

这个配置意思是 :遇到没有匹配到的url,就在 dist文件夹里面 寻找index.html,如果有,就返回index.html(即前端页面), 如果没有,就返回404。

2.第一次启动nginx显示80端口被占用

报错如下:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

可以用

fuser -v -n tcp 80

查看80端口的使用情况

结果如下:

                     USER        PID ACCESS COMMAND
80/tcp:              root      30148 F.... python

只要直接杀死占用端口的进程,就可以了,命令如下:

kill -s 9 pid #具体的pid值

再次

sudo service nginx start

就不会报错了


3. nginx 配置正确,正常启动,但是在远程访问ip地址, 依旧无法访问

在nginx 配置正确,正常启动后,依旧有一个新手在使用阿里云服务器时会遇到的坑。

原来,阿里云服务器默认关闭了所有的端口。

nginx+uwsgi部署实践和问题解决(一)

在这个管理界面里,在更多选项里,有一个安全组配置,按照提示将相应的端口加入安全组配置中。 之后就可以正常访问ip的相应端口了。

4.uwsgi 的相关配置

uwsgi 的配置全程只需要两个配置文件。

一个是 uwsgi_params ,这个文件要放在自己的python项目的根目录下。

这个文件的内容是完全固定的,用于nginx 和 uwsgi 之间的请求格式的转换。

文件的内容我是从 uwsgi文档 复制过来的。

uwsgi_params的内容如下:

uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;

另一个文件是 uwsgi服务器的主要配置,这个文件的存放位置以及文件的名字随意,因为在启动uwsgi时需要在启动命令中指定该配置文件的绝对位置以及文件名字。

以我的配置文件为例,我放在了 /etc/uwsgi/sites/ 文件夹下,名叫 uwsgi.ini

以下是我的配置文件,内容仅供参考,请结合自己的实际项目来配置

[uwsgi]
pidfile = /var/run/uwsgi.pid # 存储uwsgi运行的pid值的文件
daemonize = /home/myproject/myproject.log  # 存储运行的日志文件, myproject 是我的项目文件夹

chdir = /home/myproject/  # 项目文件夹的位置
module = myproject.wsgi:application

master = true # 指定启动主进程
chmod-socket = 664  # 运行时的权限
processes = 5  # 设置工作进程的数量
socket = /home/myproject/myproject.sock  # socket文件的位置,运行时自动生成
vacuum = true # 当服务器退出时自动删除unix socket文件和pid文件