1. 安装依赖包
yum -y install gcc gcc-c++ autoconf automake libtool make cmake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
2. 下载Nginx源码包并解压
wget -c http://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz
3. 新建nginx用户及用户组
useradd -s /sbin/nologin -M nginx # -s设置不允许登录,-M设置不建立家目录
4. 编译配置、编译、安装
./configure --help # 查看编译配置选项
./configure --prefix=/usr/local/nginx \ # 指定安装路径
--pid-path=/usr/local/nginx/run/nginx.pid \ #pid文件路径
--with-http_ssl_module \ # 指定ssl
--user=nginx \ # 指定用户
--group=nginx \ #指定用户组
--with-pcre \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module
make
make install
/usr/local/nginx/sbin/nginx -v # 安装后查看版本
cat /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx -t # 检查配置是否ok
5. 启动,停止,重启
nginx停止、重启
未添加nginx服务前对nginx的管理只能通过一下方式管理:
**nginx 管理的几种方式 -启动Nginx**
/usr/local/nginx/sbin/nginx
从容停止Nginx:
kill -QUIT 主进程号 # 如上一步中的 ps 命令输出的 29151,就是 Nginx的主进程号
快速停止Nginx:
kill -TERM 主进程号
强制停止Nginx:
pkill -9 nginx
平滑重启nginx
/usr/nginx/sbin/nginx -s reload
nginx 信号管理
nginx -s signal
信号(signal
)的值可能是以下之一:
stop
- 快速关闭服务quit
- 正常关闭服务reload
- 重新加载配置文件reopen
- 重新打开日志文件TERM
,INT
- 快速关闭QUIT
- 正常关闭HUP
- 改变配置,跟上改变的时区(仅适用于FreeBSD和Linux),使用新配置启动新的工作进程,正常关闭旧的工作进程USR1
- 重新打开日志文件USR2
- 升级可执行文件WINCH
- 正常关闭工作进程
6. firewall 添加80端口的访问策略
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload # 使永久策略立即生效
7. 浏览器或者curl访问
curl ip地址:默认端80
8. Nginx添加–with-http_stub_status_module
实现对Nginx运行的查看
ip/nginx_status
在配置文件添加以下内容:
location /nginx_status{
stub_status on;
access_log off;
}
Active connections: 当前nginx正在处理的活动连接数.
Server accepts handled requests request_time: nginx总共处理了3个连接,成功创建3 握手(证明中间没有失败的),总共处理了2 个请求,总共请求时间0。
Reading: nginx读取到客户端的Header信息数.
Writing: nginx返回给客户端的Header信息数.
Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接。
所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中。
9. 编译配置选项说明
使用
configure
命令配置构建。 它定义了系统的各个方面,包括允许使用nginx进行连接处理的方法。
最后它创建一个Makefile
。configure
命令支持以下参数:
--prefix = path
- 定义将保留服务器文件的目录。 这个同一个目录也将用于由configure
(除了库源的路径)和nginx.conf
配置文件中设置的所有相关路径。
它默认设置为/usr/local/nginx
目录。--sbin-path = path
- 设置nginx可执行文件的名称。此名称仅在安装期间使用。默认情况下文件名为prefix/sbin/nginx
。--conf-path = path
- 设置nginx.conf
配置文件的名称。 如果需要,nginx可以始终使用不同的配置文件启动,方法是在命令行参数-c file
指定。
默认情况下,该文件名为:prefix/conf/nginx.conf
。--pid-path = path
- 设置将存储主进程的进程ID的nginx.pid
文件的名称。 安装后,可以使用pid指令在nginx.conf
配置文件中更改文件名。
默认情况下,文件名为:prefix/logs/nginx.pid
。--error-log-path = path
- 设置主错误,警告和诊断文件的名称。 安装后,可以在nginx.conf
配置文件中使用error_log
指令更改文件名。
默认情况下,文件名为:prefix/logs/error.log
。--http-log-path = path
- 设置HTTP服务器主要请求日志文件的名称。 安装后,可以使用access_log
指令在nginx.conf
配置文件中更改文件名。
默认情况下,文件名为:prefix/logs/access.log
。--build = name
- 设置一个可选的nginx构建名称。--user = name
- 设置非特权用户的名称,该用户的凭据将由工作进程使用。 安装后,可以使用user
指令在nginx.conf
配置文件中更改名称。 默认的用户名是:nobody
。--group = name
- 设置由工作进程使用其凭据的组的名称。 安装后,可以使用user
指令在nginx.conf
配置文件中更改名称。 默认情况下,组名称设置为非特权用户的名称。--with-select_module
和--without-select_module
— 启用或禁用构建允许服务器使用select()
方法的模块。
如果平台似乎不支持更合适的方法(如kqueue
,epoll
或/dev/poll
),则会自动构建该模块。--with-poll_module
和--without-poll_module
— 启用或禁用构建允许服务器使用poll()
方法的模块。
如果平台似乎不支持更合适的方法(如kqueue
,epoll
或/dev/poll
),则会自动构建该模块。--without-http_gzip_module
- 禁用构建压缩HTTP服务器响应的模块。 需要zlib
库来构建和运行此模块。--without-http_rewrite_module
- 禁用构建一个允许HTTP服务器重定向请求并更改请求URI的模块。 需要PCRE库来构建和运行此模块。--without-http_proxy_module
- 禁用构建HTTP服务器代理模块。--with-http_ssl_module
- 可以构建一个将HTTPS协议支持添加到HTTP服务器的模块。 默认情况下不构建此模块。 OpenSSL库是构建和运行该模块所必需的。--with-pcre = path
- 设置PCRE库源的路径。库发行版(4.4 - 8.40版)需要从PCRE站点下载并提取。 其余的由nginx的./configure
和make
完成。 该库是location
指令和ngx_http_rewrite_module
模块中正则表达式支持所必需的。--with-pcre-jit
- 使用“即时编译”支持构建PCRE库。--with-zlib = path
- 设置zlib库的源路径。 库分发(版本1.1.3 - 1.2.11)需要从zlib站点下载并提取。 其余的由nginx的./configure
和make
完成。 该库是ngx_http_gzip_module
模块所必需的。--with-cc-opt = parameters
- 设置将添加到CFLAGS变量的其他参数。 在FreeBSD下使用系统PCRE库时,应指定--with-cc-opt="-I /usr/local/include"
。
如果需要增加select()所支持的文件数,那么也可以在这里指定,如:--with-cc-opt="-D FD_SETSIZE=2048"
。--with-ld-opt = parameters
- 设置链接过程中使用的其他参数。 当在FreeBSD下使用系统PCRE库时,应指定--with-ld-opt="-L /usr/local/lib"
。--with-http_stub_status_module
-设置Nginx服务状态监控,需要配合location使用
location /nginx_status { stub_status on; access_log off; }
10. nginx 重定向实现新旧域名过渡(www.example1.com ->www.example2.com)
利用rewrite实现
server {
server_name www.example1.com;
rewrite ^/(.*)$ http://www.example2.com/$1 permanent;
}
- 利用Nginx核心变量$host 实现
server {
server_name www.example2.com www.example1.com;
if ($host != 'www.example2.com' ) {
rewrite ^/(.*)$ http://www.example2.com/$1 permanent;
}
}
if/rewrite/set/break命令
- if语法:if (condition) {} # 默认值none
- 使用字段:server 、location
server {
listen 80;
server_name www.example.com;
access_log logs/host.access.log main;
location / {
root /var/www/html;
index index.html index.htm;
}
location ~*\.(gif|jpg|jpeg|png|bmp|swf|htm|html|css|js)$ {
root /usr/local/nginx/www/img;
if (!-f $request_filename)
{
root /var/www/html/img;
}
if (!-f $request_filename)
{
root /apps/images;
}
}
location ~*\.(jsp)$ {
root /webdata/webapp/www/ROOT;
if (!-f $request_filename)
{
root /usr/local/nginx/www/jsp;
}
proxy_pass http://127.0.0.1:8888;
}
}
- set语法:set variable value # 默认值0
- 使用字段:server 、location 、if
location / {
proxy_pass http://127.0.0.1:8080/;
set $query $query_string;
rewrite /dede /wordpress?$query?;
}
- rewrite语法:rewrite regx flag # 默认值none
- 使用字段:server 、location 、if
location ~ ^/best/ {
rewrite ^/best/(.*)$ /test/$1 break;
proxy_pass http://www.example.com;
}
- break语法:break # 默认值none
- 使用字段:server 、location 、if
server {
listen 80;
server_name www.ep.cn www.example.com;
if ($host != 'www.tb.cn') {
rewrite ^/(.*)$ http://www.ep.cn/error.txt
break;
rewrite ^/(.*)$ http://www.ep.cn/$1 permanent;
}
}
这个例子定义了两个域名www.ep.cn和www.example.com,当通过域名www.example.com访问网站时,会将请求重定向到http://www.ep.cn/error.txt页面,由于设置了break命令,因此下面的rewrite规则不再执行,直接退出。
11. ngx_http_access_module模块实现ip地址访问限制
示例:
location / {
deny 192.168.1.80;
allow 192.168.1.0/24;
allow 192.16.1.0/16;
deny all;
}
12. 目录访问权限
location /images/ {
autoindex on; # Nginx默认是不允许列出整个目录的。autoindex on来启用目录流量
autoindex_exact_size off; # 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on; # 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间
}
13. 正则表达式
正则表达式匹配:
~表示区分大小写匹配。
~*表示不区分大小写匹配。
!和!*分别表示区分大小写不匹配以及不区分大小写不匹配。
文件及目录匹配:
-f和!-f用来判断是否存在文件。
-d和!-d用来判断是否存在目录。
-e和!-e用来判断是否存在文件或目录。
-x和!-x用来判断文件是否可执行
14. Nginx内置变量
$args,此变量与请求行中的参数相等。
$document_root,此变量等同于当前请求的root命令指定的值。
$uri,此变量等同于当前request中的URI。
$document_uri,此变量与$uri含义一样。
$host,此变量与请求头部中“Host”行指定的值一致。
$limit_rate,此变量用来设置限制连接的速率。
$request_method,此变量等同于request的method,通常是“GET”或“POST”。
$remote_addr,此变量表示客户端IP地址。
$remote_port,此变量表示客户端端口。
$remote_user,此变量等同于用户名,由ngx_http_auth_basic_module认证。
$request_filename,此变量表示当前请求文件的路径名,由root或alias与URI request组合而成。
$request_uri,此变量表示含有参数的完整的初始URI。
$query_string,此变量与$args含义一致。
$server_name,此变量表示请求到达的服务器名。
$server_port,此变量表示请求到达的服务器的端口号。
- nginx 下安装缓存服务模块
Nginx自带缓存服务主要有proxy_cache 和fastcgi_cache命令集构成,前者用于反向代理时对后端内容源服务器进行缓存,后者主要用于对fastcgi的动态缓存。第三方模块ngx_slowfs_cache也可以实现缓存服务配置。
- 使用自带缓存模块实现
需要编译时添加–ngx_cache_purge-xx(版本)
下载ngx_cache_purge模块
wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz