Nginx 安装与配置
Nginx 安装与配置
基本概念
Nginx 是目前最活跃的WEB服务器。
- 根据 Netcraft 2016年11月的调查,在所有“活跃”站点(占被调查站点的18.22%)和前100万最繁忙的站点(占被调查站点的27.83%)中,Nginx 是使用数量最多的WEB服务器。
- 根据 W3Techs 的数据显示,互联网上前100万个网站中37.7%的网站使用了Nginx;前10万个网站中49.7%的网站使用了Nginx; 前1万个网站中57.0%的网站使用了Nginx。
- 根据 BuiltWith 统计数据,Nginx 在全球前1万个网站中,被使用占比达到 38.2%。
- 维基百科目前正使用 Nginx 作为 SSL终端代理。
- OpenBSD 从 5.2 版本(2012年11月1日)起,将 Nginx 作为其基础系统的一部分,成为 Apache 1.3 系统的替代方案(但后来又替换成了 OpenBSD 自己的 Httpd)。
特性
-
Nginx 是基于异步框架的网页服务器,它可以用作:
反向代理
负载均衡
HTTP 缓存
-
Nginx 支持多种应用服务:
- FastCGI脚本
- SCGI处理程序
- WSGI应用服务器
- Phusion Passenger动态HTTP
-
Nginx 具有优异的性能
- Nginx 使用的是异步事件驱动框架来处理请求,其模块化时间驱动架构可以在高负载下提供可预测的性能。
- Nginx 拥有比传统服务器
Apache
,Lighttpd
等更好的性能,主要表现在:- 内存占用少
- 稳定性高
-
Nginx 整体采用模块话设计,有丰富的模块库和第三方模块库,能够灵活配置。
-
Nginx 在 Linux 操作系统下采用了效率非常高的 Epoll 事件模型,性能尤为优异。
-
Nginx 在 OpenBSD 和 FreeBSD 操作系统下采用了 类似于 Epoll 的 高效事件模型 Kqueue,性能表现也很突出。
-
在 Nginx 官方测试数据中显示,Nginx 能够支持5万个并行连接,并且CPU,内存等资源的占用都非常低,且运行非常稳定。
-
在实际运行过程中,Nginx 通常可以支持2万至4万个并行连接。
应用场景
- Http 服务器。
Nginx 本身提供独立的HTTP服务,可以独立用于静态网页的Http服务。 - 虚拟主机
Nginx 可以在同一台服务器中根据一定的配置规则虚拟出多个网站。 - 反向代理
Nginx 可以作为反向代理来隐藏实际提供服务的主机。 - 负载均衡
当网站规模很大时,单台服务器已经无法支持实际处理要求时,可以通过 Nginx 作为前置服务对多台服务器进行集群,通过一定的策略有效的利用集群中的主机,实现负载均衡。同时,也不会因为集群中的某台机器发生宕机而引发故障。
工作原理
Nginx 采用 Master-Worker 模式进行工作,启动 Nginx 后,可以在进程中看到
nginx: master process
和 nginx: worker process
两个进程。
- master 进程的作用是:
- 读取和验证 Nginx 配置文件
- 管理 worker 进程
- worker 进程的作用是:
- 每个 worker 进程都维护了一个线程(这样可以避免线程切换带来的性能损耗)来处理连接和请求
- worker 进程的个数由配置文件决定,通常情况下服务器有几个CPU就配置几个worker进程。
安装和配置
建议使用仓库安装,比较简单,省去很多繁琐的配置细节。
这里以CENTOS8为例。
-
添加 nginx 仓库
编辑/etc/yum.repos.d/nginx.repo
写入内容[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
-
选定 Nginx 版本
yum-config-manager --enable nginx-mainline
-
安装 nginx
yum -y install nginx
-
修改配置
编辑配置文件/etc/nginx/nginx.conf
增加配置项worker_rlimit_nofile 204800; // 增加文件打开限制
修改
worker_connections
值1024000
,这里是单个worker的处理数 -
启动 nginx
systemctl start nginx
-
nginx 服务配置
配置文件在/etc/nginx/conf.d/xxxx.conf
这里建议一个域名配置一个单独的文件,方便管理。 -
nginx 反向代理配置
# 上游服务器设置 upstream xxx.com.upstream { # server 虚拟域名或IP地址: 端口 weight=权重值,越大优先级越高 server xxx.001.com weight=10; server xxx.002.com weight=5; server 10.0.0.1:80 weight=5; # 备份的域名 server xxx.004.com backup; # sock 配置,不建议使用 # server unix:/tmp/xxx.sock; } # HTTP 服务器信息 server { # 配置域名 server_name xxx1.com xxx2.com; access_log /data/logs/xxx_access.log; error_log /data/logs/xxx_error.log; # 代理所有请求 location / { proxy_pass http://xxx.com.upstream; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 静态图片缓存 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log off; access_log /dev/null; } # 静态脚本缓存 location ~ .*\.(js|css)?$ { expires 12h; error_log off; access_log /dev/null; } listen 80; # 默认页 index index.php index.html index.htm default.php default.htm default.html; }
-
nginx 日志管理
将nginx访问日志按日期进行分割,分割的目的是防止日志过大,同时可以便于定位。
在nginx中访问日志路径支持变量,但是错误日志不支持。
可以全局或在server
或http
中设置日期变量:map $time_iso8601 $logdate { '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; default 'date-not-found'; }
nginx支持多个日志输出。
中途可以删除日志文件。
nginx 正则表达式
基础规则与常规正则表达式一致。
^
: 匹配字符串的开始配置;$
: 匹配字符串的结束位置;.*
: 匹配任意字符串,*
表示匹配数量为 0 到 无穷 多;\.
: 斜杠用于转义,斜杠后的字符不进行正则解释。用于表示正则特定字符的原意;(值1|值2|值3)
: 或匹配模式,括号中的任一值可匹配,即认为匹配成功;i
: 不区分大小写~
: 用于表达式前,表示区分大小写的匹配~*
: 用于表达式前,表示不区分大小写的匹配!~
: 用于表达式前,表示区分大小写的不匹配!~*
: 用于表达式前,表示不区分大小写的不匹配+
: 匹配 1 到 无穷 多
Nginx server_name 配置
- 精确匹配
server {
server_name xxx.com xx2.com;
}
- 以
*
通配符开始,可以实现xxx.com
下的所有子域名使用此解析。
server {
server_name *.xxx.com;
}
- 以
*
结尾,指定特定子域名
server {
server_name www.*;
}
- 匹配正则表达式,其中
www
可以作为变量$www
使用。
server {
server_name ~^(?<www>.+)\.xxx\.com$;
localtion / {
root /sites/$www;
}
}