前言
自django项目做完已有几天,这几天竟然都卡在了nginx配置上,在网上也搜了各种教程,但是就是无法访问,我的内心是崩溃的。好在今天配置完了,发个博客记录一下配置文件及过程,各种安装过程就不说了,直接上配置文件,正所谓:你离成功只差一个配置文件!!!
项目结构
- 项目名为:
project
- 项目根目录:
/root/project
- 项目文件结构:
1
2
3
4
5
6
7
|
project/
├── manage.py
└── project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
|
- uwsgi配置文件路径:
/root/script/uwsgi.ini
- nginx根目录:
/etc/nginx
- nginx默认配置文件:
/etc/nginx/nginx.conf
- 项目自定义配置文件:
/etc/nginx/conf.d/project.conf
配置 uwsgi
配置文件(uwsgi.ini)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/root/project
# 指定项目的application
module=project.wsgi:application
# 指定sock的文件路径
socket=/root/ctguinfowork/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/root/script/uwsgi.pid
# 指定IP端口
http= :8080
# 指定静态文件,这个项目中没有,如果你的项目中有静态文件的话按这个目录结构配置
static-map=/static=/root/project/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/root/script/uwsgi.log
|
启动 uwsgi 服务
启动uwsgi就比较简单(如果没有报错的话):uwsgi --ini /root/script/uwsgi.ini
启动成功后理论上来说就可以在浏览器栏输入ip:port
来访问项目了,port为uwsgi中配置的端口
配置Nginx
Nginx 配置文件
配置文件/etc/nginx/conf.d/project.conf
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
upstream project{
server 47.100.118.99:8080;
}
server {
listen 80; #监听端口
server_name 47.100.118.99; #访问地址,这里比较坑,填什么就映射什么,如果你填localhost、127.0.0.1之类的,就意味着你只能在本机浏览器上访问,因为别人在自己电脑输入127.0.0.1就不是你了
access_log /var/log/nginx/project.access.log main; #普通日志
error_log /var/log/nginx/project.error.log; #错误日志
#root html;
#index index.html index.htm index.php;
location / {
proxy_pass http://project; #这里http后等于第一行配置的名字
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
|
默认配置文件(/etc/nginx/nginx.conf
)
默认配置文件基本上不用配置,保证其http{}里面包含上面的自定义文件就好了,要找到类似于这句话include /etc/nginx/conf.d/*.conf;
启动Nginx
启动也比较简单:/etc/nginx/nginx
直接运行这个nginx可执行文件就好了,有环境变量的可以直接运行。如果已经启动的话,修改配置文件后要重新加载配置:nginx -s reload
访问项目
现在在浏览器输入你的nginx配置就可以直接访问uwsgi启动了项目了(尽管我也不知道为什么uwsgi就可以访问我非要用nginx),映射关系就是:nginxip:nginxport == uwsgiip:uwsgiport
总结
这么个简单的配置耽误了我好长时间,认真总结如下:
- 急于求成。尚不了解nginx、uwsgi等配置文件含义的情况下直接使用,以致于一个小小的路径引用错误就让自己困惑很久
- 没看官方文档的习惯。其实nginx官方文档(尽管它是英文版的)有很多配置方式和示例代码,完全不像百度搜到的博客那样繁琐。而且一遇到问题就百度,可能将问题越加复杂化
- 可能是每天没睡好变笨了