简介
nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 ------百度百科
官网
GitHub
nginx的管理员手册
nginx第三方模块官网
安装
yum方式安装nginx
1、安装先决条件:
sudo yum install yum-utils -y
2、请创建/etc/yum.repos.d/nginx.repo 包含以下内容
vim /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
3、默认情况下,使用稳定的nginx软件包的存储库。如果要使用主线nginx软件包,请运行以下命令
sudo yum-config-manager --enable nginx-mainline
4、安装nginx
sudo yum install nginx
当提示您接受GPG密钥时,请验证指纹是否匹配 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62,如果是,则接受它。
编译方式安装
1、下载编译时需要的依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
2、获取nginx
mkdir /app
cd /app
wget http://nginx.org/download/nginx-1.18.0.tar.gz
3、创建nginx用户
useradd nginx -M -s /sbin/nologin
tar xf nginx-1.18.0.tar.gz
4、进入nginx目录进行编译
cd nginx-1.18.0
./configure --prefix=/etc/nginx/ --sbin-path=/usr/local/bin/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
make && make install
systemd管理
cat >/etc/systemd/system/nginx.service<<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/bin/nginx -t
ExecStart=/usr/local/bin/nginx
ExecReload=/usr/local/bin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service
使用第三方模块
--add-module=
动态添加第三方模块
1、停止正在运行的nginx
systemctl stop nginx
2、获取第三方模块
GitHub搜索第三方模块名字并下载zip包
unzip 包名
3、进行编译
cd /app/nginx-1.18.0
./configure --prefix=/etc/nginx/ --sbin-path=/usr/local/bin/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --with-http_stub_status_module --add-module=/etc/nginx/module/ngx_cache_purge-master
make
注意:
不要启用参数--modules-path=path,否则手动指定的模块位置会不被识别,安装新增加的模块失败。
4、拷贝nginx文件进行覆盖
cp /app/nginx-1.18.0/objs/nginx /usr/local/bin/nginx
注意:
确保nginx已经不在运行状态,否则会覆盖失败
5、启动nginx并查看模块
systemctl start nginx
nginx -V
注释
编译安装详细参考官方文档
作用
提供静态内容
Web服务器的一项重要任务是分发文件(例如图像或静态HTML页面)。
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
注释:
如果有多个匹配的location
块,nginx将选择前缀最长的块。也就是匹配精确度最高的模块
简单的代理服务器
nginx的一种常用用法是将其设置为代理服务器,这意味着服务器可以接收请求,将请求传递给代理服务器,从请求中检索响应并将它们发送给客户端。
客户端的图像请求,本地目录中的文件提供服务
客户端的其他请求,转发到代理服务器
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ .(gif|jpg|png)$ {
root /data/images;
}
}
注释
~:正则表达式的开头固定写法
(): 识别为一个整体
| 或者
$ 以什么结尾
设置FastCGI代理
nginx可用于将请求路由到FastCGI服务器,该服务器运行使用各种框架和编程语言构建的应用程序
与Fast CGI服务器一起使用的最基本的nginx配置包括使用fastcgi_pass 指令而不是proxy_pass指令,以及fastcgi_param 指令来设置传递给FastCGI服务器的参数。
server {
location / {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
location ~ .(gif|jpg|png)$ {
root /data/images;
}
}
注释:
SCRIPT_FILENAME:用于确定脚本名称
QUERY_STRING: 用于传递请求参数
配置
配置文件的结构
nginx受配置文件中指定的指令控制的模块组成。伪指令分为简单伪指令和块伪指令。一个简单的指令由名称和参数组成,这些名称和参数之间用空格分隔,并以分号结尾。
块指令的结构和简单指令的结构相同,但是有其他指令,称为上下文。
为注释内容
使用
nginx的命令以及工作机制
nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置以及维护工作流程。工作进程对请求进行实际处理。
nginx使用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。工作进程的数量在配置文件中定义,可以针对给定的配置固定,也可以自动调整为可用CPU内核的数量
nginx命令
信号:
stop 快速关闭
quit 正常关闭
reload 重新加载配置文件
reopen 重新打开日志文件
解释
nginx -s reload工作机制
一旦主进程接收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果加载成功,则主进程将启动新的工作进程,并将消息发送到旧的工作进程,要求他们关闭。
否则,主进程将回滚到更改之前继续使用旧配置。
旧的工作进程接收到关闭命令,停止接受新的连接并继续为当前请求提供服务,直到为所有此类请求提供完服务后,旧的工作进程退出。
nginx -s stop 和 nginx -s quit 的区别
quit 是一个优雅的关闭方式,nginx退出前完成已连接的连接请求
stop 是快速关闭,不管有没有正在处理的请求
nginx配置文件
指令
配置文件由指令及其参数组成。每个指令以分号结尾。其他指令用作将相关指令组合在一起的“容器”,将它们括在花括号({})中;这些通常称为块。
user nobody;
error_log logs/error.log notice;
worker_processes 1;
功能特定的配置文件
include conf.d/http;
include conf.d/stream;
include conf.d/exchange-enhanced;
语境
events –常规连接处理
http – HTTP流量
mail –邮件流量
stream – TCP和UDP流量
虚拟服务器
每个流量处理都包含server块,定义控制请求处理的虚拟服务器。可以在server上下文中定义指令,根据流量类型而有所不同
对于http流量,每个server指令控制特定域或者IP地址上对资源的请求处理。location上下文中的一个或者多个server上下文定义了如何处理url的特定集合。
对于邮件和TCP流量(mail和stream上下文),server每个伪指令控制到达特定TCP端口或者UNIX套接字的流量处理
示例
user nobody; # a directive in the 'main' context
events {
# configuration of connection processing
}
http {
# Configuration specific to HTTP and affecting all virtual servers
server {
# configuration of HTTP virtual server 1
location /one {
# configuration for processing URIs starting with '/one'
}
location /two {
# configuration for processing URIs starting with '/two'
}
}
server {
# configuration of HTTP virtual server 2
}
}
stream {
# Configuration specific to TCP/UDP and affecting all virtual servers
server {
# configuration of TCP virtual server 1
}
}
通常,子上下文将继承父级别包含的指令设置。
某些指令可以出现在多个上下文中,在这种情况下,您可以通过在子上下文中包含该指令来覆盖从父项继承的设置。
proxy_set_header指令
nginx_manual
BSD(类Unix)系统管理员手册
名字 HTTP和反向代理服务器,邮件代理服务器
简介 nginx [-?hqTtVv] -c 文件 -g 指令 -p 前缀 -s 信号
说明 nginx是一个HTTP和反向代理服务器,一个邮件代理
服务器和通用TCP/UDP代理服务器。它以高性能著称,
稳定,功能集丰富,配置简单,资源消耗低。
选项如下
-?, -h 打印帮助
-c file 使用备用配置文件。
-g 设置全局配置指令。有关详细信息,请参见示例。
-p 设置前缀路径。默认值为/etc/nginx。
-q 在配置测试期间禁止显示非错误消息。
-s signal 向主进程发送信号。
下表显示了相应的
响应系统信号
stop SIGTERM
quit SIGQUIT
reopen SIGUSR1
reload SIGHUP
-T 与-t相同,但还将配置文件转储到标准输出。
-t 不要运行,只需测试配置文件。nginx检查con配置文件语法,然后尝试打开配置文件。
-V 打印nginx版本、编译器版本和配置脚本参数。
-v 打印nginx版本。
信号
nginx的主进程可以处理以下信号:
SIGQUIT 优雅地关闭。
SIGUSR1 重新打开日志文件。
SIGUSR2 动态升级nginx可执行文件。
SIGWINCH 优雅地关闭工作进程。
虽然通常不需要显式地控制工作进程,但它们支持还有一些信号
SIGINT, SIGTERM Shut down quickly. SIGINT,SIGTERM很快就关机了。
SIGHUP SIGHUP重新加载配置,使用新的con启动新的工作进程并优雅地关闭旧的工作进程。
SIGQUIT Shut down gracefully. 优雅地关闭。
SIGUSR1 Reopen log files. 重新打开日志文件。
SIGUSR2 Upgrade the nginx executable on the fly. 动态升级nginx可执行文件。
SIGWINCH Shut down worker processes gracefully.优雅地关闭工作进程。
DEBUGGING LOG 调试日志
调试日志要启用调试日志,请重新配置nginx以使用调试进行生成
./configure --with-debug ...
然后设置错误日志的调试级别
error_log /path/to/log debug;
还可以启用对特定IP地址的调试:
events {
debug_connection 127.0.0.1;
}
环境
NGINX环境变量由NGINX内部使用,不应设置直接由用户执行。
文件
/var/run/nginx.pid 包含nginx的进程ID
/etc/nginx/nginx.conf 主配置文件
/var/log/nginx/error.log 错误日志文件
退出状态
成功时退出状态为0,如果命令失败,则为1。
示例
测试配置文件~/mynginx.conf公司具有PID和数量的全局指令
工作进程数
nginx -t -c ~/mynginx.conf -g "pid /var/run/mynginx.pid; worker_processes 2;"
另请参见
http://nginx.org/en/docs/
http://nginx.org/en/support.html
查看nginx安装的模块
nginx -V 2>&1 | grep -- '模块名'