配置环境:
System:CentOS6.8 64位
Database Server version: 5.7.73
Nginx version:1.10.2
Python version:python 3.4.1
Django version:1.11.2
Nginx
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
当它作为 Web 服务器,相比 Apache来说,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,能够支持高达 50,000 个并发连接数的响应。
当它作为负载均衡服务器,Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
当它作为邮件代理服务器, Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器。 Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。
安装
使用源码编译安装,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。一般我们都需要先装pcre和 zlib,pcre为了重写rewrite,zlib为了gzip压缩。如果没有ssl的话应该先装上。
cd /usr/local/src
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/opt/app/openet/oetal1/chenhe/pcre-8.37 \
--with-zlib=/opt/app/openet/oetal1/chenhe/zlib-1.2.8 \
--with-openssl=/opt/app/openet/oetal1/chenhe/openssl-1.0.1t
make
make install
--with-pcre=/usr/src/pcre-8.34
指的是pcre-8.34 的源码路径。
--with-zlib=/usr/src/zlib-1.2.7
指的是zlib-1.2.7 的源码路径。
确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx
命令来启动 Nginx,然后打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
Nginx基本配置文件为nginx.conf
文件,当然,也可以使用include包含其余的.conf
文件。可以根据不同的需求添加配置,只需要在include写好配置文件的路径。
几个常用的Nginx命令:
service nginx start
–>启动服务器service nginx stop
–>关闭服务器nginx -s reload
–>服务器重启nginx -t
–>服务器配置文件语法检查
安装使用参考网站:http://www.nginx.cn/doc/index.html
uwsgi
uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍,性能超好,内存占用低等诸多好处,而且和Nginx配合可以解决负载均衡等问题,是一种比较经典的配置方式。
安装uwsgi
安装方式也很简单,直接使用python的经典安装方式pip
pip install uwsgi
就OK了。
测试uwsgi
安装后应该进行测试是否使用OK:
首先可以在项目根目录下创建一个test.py
文件,源码如下:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
直接使用8000端口和测试文件test.py
运行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
然后通过浏览器访问http://[ip]:8000
可以看到测试文件的”Hello World”则uwsgi运行正常。
Django+uwsgi+Nginx配置
下面进行亲测成功的经典配置Django+uwsgi+Nginx。
Django+Nginx
使用Django内置服务器与Nginx反向代理可以测试Nginx能否正常工作。
首先,将Django项目运行起来,python manage.py runserver 0.0.0.0:8000
运行起来。
然后,开始配置Nginx的相关文件:Nginx的配置文件为nginx.conf
,我们可以单独设置项目文件的Nginx配置,然后将其include到原文件中。
比如,我们的nginx.conf
在/etc/nginx
路径下,我们可以在这个目录下创建一个conf.d
目录,然后再/etc/nginx/conf.f
下创建default.conf
文件,然后再***.conf
文件中配置Nginx对这个项目的代理。
blogproject.conf
文件如下:
#
# The default server
#
#server {
# listen 80 default_server;
# listen [::]:80 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
#
#}
#配置开始
server{
listen 80;
server_name 106.14.215.47;
rewrite ^/$ /blog/index/ break;
location / {
proxy_pass http://[ip地址]:8000;
}
}
#配置结束
然后重启服务器,nginx -s reload
(确保内置服务器在运行中)然后就可以通过默认的80端口访问项目了。http://[ip]
。
Django+uswgi
首先,将用uwsgi服务器运行Django项目,这里我们使用之前创建的项目blogproject来进行测试。当然Django项目本身需要可以正常使用,也就是使用python manage.py runserver 0.0.0.0:8000
可以正常访问。然后更改配置使用uwsgi做服务器:
更改
wsgi.py
文件import os from django.core.wsgi import get_wsgi_application #from django.core.handlers.wsgi import WSGIHandler os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogproject.settings") application = get_wsgi_application() #application = WSGIHandler() #注释掉的是原自动生成的manage.py的配置
- 启动uwsgi服务器
在项目根目录下运行uwsgi --http :8000 --module blogproject.wsgi
- 打开浏览器,输入
http://[ip]:8000+[django的内部urls]
测试项目是否可访问。
Django+uswgi+Nginx
将以上两个服务器与Django配置连接。
保证nginx.conf
同级目录下有uwsgi_params
文件这是连接Nginx和uwsgi的关键。
首先,用uwsgi与django项目启动起来,配置与上文一样,不过只有最后不是直接用HTTP访问,而是和Nginx建立socket连接。也就是Django+uwsgi第二步改成运行uwsgi --socket :8000 --module blogproject.wsgi
。然后通过8000端口和Nginx连接,下面配置Nginx:
在这里直接更改上文创建的blogproject.conf
为:
upstream django{
server [ip]:8000;#与uwsgi的连接端口
}
server{
listen 80;#外部客户端默认接入端口
server_name [ip];
charset utf-8;
rewrite ^/$ /blog/index/ break;#默认输入域名或ip(默认的80端口)时跳转的网址
client_max_body_size 75M;
#Django media
location /media{
alias /usr/local/www/blogproject/blog/media;
}
#Django static
location /static{
alias /usr/local/www/blogproject/blog/static;
}
#Django server
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
然后重启Nginx服务器,(注意uwsgi服务器需要一直在运行状态)就可以通过http://[ip]
或者域名访问编写的Django网站了。
配置完成。
Django+MySQL配置
Django默认的数据库为SQLite,如果需要更改自己的数据库时,需要自己重新配置。下面以MySQL为例:
首先,Django无法创建数据库,需要通过命令行或其他MySQL的软件创建一个需要的数据库,不需要创建table,Django可以创建。
- 创建数据库
mysql>CREATE DATABASE blogproject;
- 更改
settings.py
中关于数据库的设置
找到DATABASS设置,更改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blogproject',#创建的数据库名
'USER':'root',#数据库用户名
'PASSWORD':'*******'#数据库密码
}
}
然后执行python manage.py makemigrations
和python manage.py migrate
进行数据库迁移,就可以使用MySQL数据库进行数据库存取使用了。
ps:当使用数据库时,遇到问题:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
可能是数据库未启动使用初始启动命令service mysqld start