介绍: Nginx [engine x] 是一个高性能 HTTP 服务器和反向代理服务器,邮件代理服务器,并且还是一个通用的 TCP/UDP 代理服务器。最初由 Igor Sysoev 编写。据Netcraft称,截止到2019年4月份,Nginx 服务或代理了26.22%的网站。其中有一些比较知名的网站,如Netflix,Dropbox,WorkPress,FastMail.FM 等。
后期在了解相关配置的过程中,参看了官方文档,发现很多简便的安装及配置的方法,在官方文档中都有说明,这为我们学习 Nginx 提供了第一手资料,想要详细了解相关信息。查看
0. 特性与应用场景
特性:
- 可针对静态资源高速高并发访问及缓存。
- 可使用反向代理加速,并且可进行数据缓存。
- 具有简单的负载均衡,节点健康检查,容错能力。
- 支持远程FastCGI服务的缓存加速。
- 支持FastCGI,Uwsgi,SCGI,Memcached Servers的加速和缓存。
- 支持SSL TSL SNI。
- 具有模块化架构,过滤器包括gzip压缩,ranges支持,chunked响应,XSLT、SSL及图像缩放功能等。
应用场景:
- Web服务器
- 反向代理、负载均衡服务器及邮件代理服务器
- 前端业务数据缓存服务器
1. 部署
1.1 安装准备
部署环境: CentOS 6.6
采用方式:编译安装
软件下载地址: http://nginx.org/en/download.html
1.2 安装步骤
安装相关依赖软件包:
# yum install pcre pcre-devel openssl openssl-devel -y
创建安装目录及解压软件包:
# mkdir -p /application/nginx
# mkdir -p /tools
# cd /tools
# wget -q http://nginx.org/download/nginx-1.15.12.tar.gz
# tar xvf nginx-1.15.2.tar.gz
创建用户,配置安装参数:
# useradd nginx -s /sbin/nologin -M
# ./configure --user=nginx --group=nginx --prefix=/application/nginx --with-http_stub_status_modules --with-http_ssl_module
# make && make install
官方给出的安装方法:
$ sudo yum install epel-release
$ sudo yum update
$ sudo yum install nginx
使用yum的安装方法:
$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/mainline/<OS>/<OSRELEASE>/$basearch/
gpgcheck=0
enabled=1
说明:
- /mainline 表示最新的Nginx版本,删除它可以获取最新的稳定版本
- 指定 rhel 或者 centos
- 指定发行版本号,6, 6.x, 7, 7.x 或者其他
举例:
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
$ sudo yum update
$ yum install nginx
$ nginx # 启动
配置信息检查提示:
# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx//conf/nginx.conf test is successful
安装完成,检查配置信息也没有问题。
启动(重启)nginx指令:
# /application/nginx/sbin/nginx
# /application/nginx/sbin/nginx -s reload # 重新加载配置文件
# /application/nginx/sbin/nginx -s stop # 快速关闭 (fast shutdown)
# /application/nginx/sbin/nginx -s quit # 优雅的关闭 (graceful shutdown)
# /application/nginx/sbin/nginx -s reopen # 重新打开日志文件
验证服务器启动正常:
# curl localhost
或者使用浏览器查看。
2. 相关配置
2.1 各个目录及文件作用
- ./sbin 启动脚本所在位置
- ./logs 日志所在目录
- ./conf 配置文件所在位置
- ./conf/extra 拓展的配置文件所在的位置,会在./conf/nginx.conf 中引用
- ./conf/nginx.conf 主配置文件 ./conf/nginx.conf.default 默认主配置文件
- ./html 网站资源所在位置
- ./fastcgi_temp fastcgi 临时数据文件
- ./proxy_temp proxy 临时数据文件
- ./scgi_temp 临时数据文件
- ./uwsgi_temp 临时数据文件
2.2 配置文件中各参数说明
配置文件中,一般都是采用指令来指定配置参数,简单的指令可以是单行配置参数,一个指令集会使用大括号进行包围,形成一个配置的块。并且这些指令集的块也可以通过引用的方式来进行指定,指定的位置为配置文件所在的当前目录。一般采用
include extra/abc_test.conf
进行指定。
一些顶层的核心的配置配置内容:
- events 通用连接
- http HTTP配置区块
- mail MAIL配置区块
- stream TCP/UDP 配置区块
放在这些区块外的指令为主配置的内容。
2.3 配置web 服务
配置简单的 WEB 服务,主要是基于各种情况下的虚拟主机的配置,配置具有普遍性,可以在其他服务区块中配置不同的虚拟主机。
2.3.1 简单web服务示例
主配置信息如下:
work_processor 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
server_tokens off;
keepalive_timeout 65;
include extra/www.conf;
include extra/bbs.conf;
include extra/blog.conf;
}
在 http 区块中,定义了mime的类型,定义了日志的格式,定义了是否显示 Nginx 的版本信息,定义了保持连接的时间。定义了不同的虚机主机,这些虚机主机的配置文件都放在了./conf/extra/目录下,举例说明:
server{
listen 80; # 使用基于端口和ip地址的虚拟主机修改此处配置
server_name www.xiaokea.com; # 使用基于域名的虚拟主机修改此处配置
location / {
root html/www;
index index.html index.htm;
}
}
此处如果将端口省略的话,将会使用80端口,如果省略IP地址的话,服务器将会监听所有的IP地址。
2.3.2 location 指令相关说明
location指令的作用是根据用户的请求的URI来执行不同的应用,也就是根据用户请求的网址URL进行匹配,匹配成功执行相关的操作。
示例说明:
location =/ { # 当用户请求 “/” 时,匹配 configuration A
configuration A
}
location / { # 用户请求 /index.html 时,匹配 configuration B
configuration B
}
location /some/path/ { # 用户请求 /some/path/index.html时,匹配configuration C
configuration C
}
location ^~ /some/path/ { # 匹配常规字符串,不做正则匹配检查
...
}
location ~* \.(gif|jpg|jpeg)$ { # 正则匹配
...
}
root 指令指定了静态文件在文件系统(服务器)中的位置,请求的URI将域名后的路径信息添加在这个路径后,来获得完整的静态文件所在的位置。
比如:我们想要请求的地址为 www.xiaokea.com/data/index.html, 这个URI会匹配的路径为:
location /data {
root html/www/; # 这里 html 所在的路径为 Nginx 安装的根目录
index index.html index.htm;
}
这里做一下通俗点的解释:建立了一个虚拟主机,虚拟主机指定的根目录为 html/www/,我们在请求URI 为 www.xiaokea.com/data/index.html 的信息时,首先去 www 这个虚拟主机的根目录下找域名后面的资源,服务器会去匹配 location ,然后根据资源给出响应。
2.3.3 配置流媒体视频服务
中心的网断掉了,打算搭建一个文件共享的服务,samba已经搭建成功,现在想搭建一个视频服务器,将大家认为不错的电影提供给大家看,于是萌生了搭建一个流媒体视频服务器的打算,晚上查找了相关资料,顺利搭建完成,虽然有待优化,不过现在看来已经可以观看视频,特在此进行总结。
下载 nginx-rtmp-module 模块,并指定配置参数,–add-module=/tools/nginx-rtmp-module-master,重新编译安装。
添加一个新的虚拟主机,并在主配置文件中添加rtmp的配置信息。
rtmp{
server {
# 监听端口
listen 1935;
chunk_size 4000;
application myvideo{
# 开启实时
live on;
hls on;
# 推流请求路径,文件存放路径
hls_path /application/nginx/video;
hls_fragment 5s;
}
}
}
2.3.4 配置 HTTPS 安全网站服务
3. 功能优化
Nginx 在安装的过程中,会指定一些默认的参数,这些参数在生产过程中会严重影响系统的安全,另外,在测试环境中,也需要提供一些方便测试的接口。我们可以在安装完成后修改一些参数来保证系统的安全性,也就是对一些功能的优化,以下为实践过程中遇到的可以优化的选项。
3.1 状态信息的显示
状态信息的显示可以帮助我们测试系统的性能,还能帮助我们定位服务器问题所在,但是,这个状态信息最好只能被管理者看到。
# status
server {
listen 8081; # 查看状态信息的端口
server_name localhost;
location / {
stub_status on; # 打开可以查看状态信息指令
access_log off;
allow 192.168.2.0/24; # 配置可以查看状态信息的地址段
deny all;
}
}
3.2 错误日志信息配置
错误日志是定位问题首先需要查看的信息,所以配置错误日志将会帮助我们快速定位问题。如下为错误日志的格式信息:
error_log file level;
关键字 日志文件 错误日志级别
# defualt: error_log logs/error.log error;
可以放置的区块及指令的位置有: main http server location。
这里说明一下错误日志的级别,有【debug|info|notice|warn|error|crit|alert|emerg】这些选项,级别越高,记录的信息越少,生产场景一般使用的warn|error|crit 三个级别,注意不要配置过低的级别等级,会带来巨大的磁盘IO。
3.3 隐藏 Nginx 软件版本信息
配置文件中添加:
http{
...
server_tokens off;
...
}
3.4 优化 Nginx 服务性能
配置 Nginx 的工作进程的个数:
worker_processes 4; # 这里指定的进程数要和CPU的总核数一致,这样可以保证高效运行。
worker_cpu_affinity 0001 0010 0100 1000; 配置Nginx 与cpu 的亲和力参数。
3.5 调整 Nginx 单个进程允许的客户端最大连接数
worker_connections 20480;
3.x 其他优化配置
- 默认的配置文件中,user 为 nobody。在这里为了安全起见,我们在安装前指定了配置文件的用户和组,在上文中,我们指定为nginx。如果上文中配置参数不指定相关的用户,默认为nobody。