频道栏目
首页 > 资讯 > Linux > 正文

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

18-04-08        来源:[db:作者]  
收藏   我要投稿

部署情景描述:

这周我的外包项目进入了部署阶段。这个项目采用了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 配置正确,正常启动后,依旧有一个新手在使用阿里云服务器时会遇到的坑。

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

在这个管理界面里,在更多选项里,有一个安全组配置,按照提示将相应的端口加入安全组配置中。 之后就可以正常访问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文件
相关TAG标签
上一篇:nginx+uwsgi部署实践和问题解决(二)
下一篇:windows自带的客户端程序telnet使用介绍
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站