用Python语言开发的站点使用的Web服务器主要有Nginx、Apache以及淘宝的Tengine。Nginx是由Igor Sysoev在2004年发布的一个开源、高性能的HTTP服务器和反向代理,它还可以用来作为IMAP/POP3的代理服务器。它能被广泛使用,有如下原因:
- 作为Web服务器,它处理静态文件、索引文件的效率非常高
- Nginx的设计非常注重效率,它支持epoll/kqueue等网络I/O模型,可以最大支持5W个并发连接,并且只占用很少的内存资源。
- 稳定性高,宕机的概率很低
- 强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力
- 配置简单。配置文件通俗易懂,上手很容易
- 支持热部署,可以在不间断服务器的情况下对软件进行升级。
- 提供健康检查支持,当后端出现问题时,就不再往这个后端分发请求,并且还会做后续的检查,知道这个后端恢复正常。
Nginx模块化
Nginx模块化的思想是一个很久的概念,但也正是成熟的思想照就了Nginx的巨大优越性。我们知道Nginx从总体上来讲是由许多个模块构成的。习惯将Nginx分为5大模块:核心模块,标准HTTP模块,可选HTTP模块,邮件服务模块和第三方模块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6z6fsqp-1571049706679)(https://github.com/Mr-ycx/Resources/blob/master/nginx_server.png?raw=true)]
5个模块重要性依次递减
- 核心模块:核心模块是Nginx服务器正常运行必不可少的一个模块,它如同系统的内核。它提供了Nginx最基本的服务,像进程管理,权限控制和错误日志等
- 标准HTTP模块:标准HTTP模块支持标准HTTP的功能
- 可选HTTP模块:可选HTTP模块主要用于拓展标准的HTTP功能,让Nginx处理一些特殊的服务
- 邮件服务模块:邮件服务模块主要用于支持Nginx的邮件服务
- 第三方模块:第三方模块是为了拓展Nginx服务器的应用,完成开发者想要的功能
反向代理和正向代理
正向代理,作为一个媒介将互联网上获取的资源返回给相关联的客户端。代理和客户端在一个局域网,对于服务端是透明的。反向代理,根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。代理和服务器在一个局域网,对客户端是透明的。Nginx是反向代理的最佳选择,那么为什么需要反向代理呢?反向代理有如下作用:
- 提高动态语言的I/O处理能力,Python、PHP、Java这样的动态服务的I/O处理能力不高,反向代理可以缓冲请求,交给后端一个完整的HTTP请求,同样,Nginx也可以缓冲响应,也达到了减轻后端的压力。
- 加密和SSL加速
- 安全。它保护和隐藏了原始资源服务器,还可以用作应用防火墙防御一些网络攻击。
- 负载均衡。它帮应用服务器分配请求,以达到资源使用率最佳、吞吐率最大、响应时间最小的目的
- 缓存静态内容。代理缓存通常可以满足相当数量的网站请求,大大降低应用服务器上的负载
- 支持压缩。通过压缩优化可以提高网站访问速度,还能大大减少宽带的消耗
安装
apt-get install nginx
安装程序把Nginx以服务的形式安装在系统中,相关的程序及程序文件路径如下:
- 程序文件:/usr/sbin/nginx
- 全局配置文件:/etc/nginx/nginx.conf
- 访问日志文件:/var/log/nginx/access.log
- 错误日志文件:/var/log/nginx/error.log
- 站点配置文件:/etc/nginx/sites-enabled/default
全局配置与站点配置
Nginx安装后以默认的方式启动,在开发调试的过程中可能需要调整Nginx的运行参数,这些运行参数通过全局配置文件(nginx.conf)和站点配置文件(sites-enabled/*)进行设置。对全局配置文件(/etc/nginx/nginx.conf)中关键可设置参数解析如下:
# 定义运行Nginx的用户
user www-data;
# Nginx进程数,应设置与系统CPU数量相等的数值
worker_processes 4;
# 每个Nginx进程可以打开的最大文件数
worker_rlimit_nofile 65535;
events {
# 每个Nginx进程允许最大客户端连接数
worker_connections 768;
# 在Nginx接到一个新连接通知后调用accept()来接收尽量多的连接
multi_accept off;
}
http {
# 是否允许文件上传
sendfile on;
# 上传文件大小限制
client_header_buffer_size 32k;
# 防止网络阻塞
tcp_nopush on;
# 防止网络阻塞
tcp_nodelay on;
# 允许客户端长连接最大秒数
keepalive_timeout 65;
# Nginx散列表大小。值越大,占用的内存空间越大,但路由速度越快
types_hash_max_size 2048;
# 访问日志文件路径名
access_log /var/log/nginx/access.log;
# 错误日志文件路径名
error_log /var/log/nginx/error.log
# include命令加载站点配置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
在每个Nginx服务器中可以运行多个Web站点,每个站点的配置通过站点配置文件设置。每个站点应该以一个单独的配置文件存放在/etc/nginx/sites-enabled 目录中,默认站点的配置文件名为/etc/nginx/sites-enabled/default,对其中关键内容的解析如下:
server {
# 配置站点监听的端口
listen 80;
# 配置HTTP根页面目录
root /usr/share/nginx/html;
# 配置HTTP根目录中的默认页面
index index.html index.html;
# 站点监听的IP地址,默认的localhost只可用于本机访问,一般需要将其更改为真实IP
server_name localhost;
# location 用于配置URL的转发接口
location /user/ {
# 此处配置http://server_name/user/的转发地址
proxy_pass http://127.0.0.1:8080;
}
# 错误页面配置,如下配置定义HTTP 404错误的显示页面为/404.html
error_page 404 /404.html;
}
检查Nginx配置文件的语法
nginx -t -c /etc/nginx/nginx.conf
启动Nginx服务器
sudo service nginx start
查看Nginx服务的状态
sudo service nginx status
停止Nginx服务器
sudo service nginx stop
重启Nginx服务器
sudo service nginx restart