1. Nginx 的安装与部署
-
安装 Nginx
-
安装make、安装g++:
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
-
安装第三方库等:
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
-
安装 Nginx:
-
下载 Nginx:
mkdir Nginx
cd Nginx
-
解压安装 Nginx:
tar tar -xzvf nginx-1.9.9.tar.gz
cd nginx-1.9.9/
./configure
make
make install
-
-
目录介绍:
-
解压目录介绍:
- src:存放Nginx的所有源代码。
- man:存放 Nginx 的帮助文档。
- html:存放了两个后缀为 .html的文件。
- conf:存放 Nginx 的配置文件。
- configure 文件:Nginx 的脚本文件。
-
-
Nginx 服务的启停控制:
-
Nginx 服务的信号控制
-
获取 Nginx 的 PID:
cat /usr/local/nginx/logs/nginx.pid
ps -ef | grep nginx
- Nginx 可接收的信号
-
-
-
TERM 或 INT |
快速停止 Nginx 服务。 |
QUIT |
平缓停止 Nginx 服务。 |
HUP |
"平滑重启":使用新的配置文件启动进程,之后平缓停止原有进程。 |
USR1 |
重新打开日志文件,常用于日志切割。 |
USR2 |
"平滑升级":使用新版本的 Nginx 文件启动服务,之后平滑停止原有 Nginx。 |
WINCH |
平缓停止 worker process,用于 Nginx 服务器平滑升级。 |
-
使用 kill 命令发送信号
kill SIGNAL PID
kill SIGNAL `cat "filepath"`
SIGNAL 用于指定信号,filepath 为 nginx.pid 的路径
-
Nginx 服务的启动
- ./nginx 的相关用法
-v |
打印版本号 |
-V |
打印版本号与配置 |
-t |
测试正确性并退出 |
-q |
测试配置时只显示错误 |
-p |
指定服务器路径前置 |
-c |
指定 Nginx 配置文件路径 |
-g |
指定 Nginx 附加配置路径 |
-
Nginx 的服务停止
./nginx -s stop 快速停止 Nginx 服务。
./nginx -s quit 平缓停止 Nginx 服务。
./nginx -s reload 重新加载配置文件,使用一个新的worker进程启动一个新的worker进程,优平缓关闭旧的worker进程。
kill -s TEAM | INT |QUIT `cat /usr/local/nginx/logs/nginx.pid`
kill -9 | SIGKILL `cat /usr/local/nginx/logs/nginx.pid`
-
Nginx 服务器的升级
-
实现 Nginx 服务器的升级需要新旧服务器安装路径一致,如果不一致,则需要更改旧服务器的安装路径
./nginx -p newinstallpath
-
使用 USR2 信号用于发送平滑升级型号
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
- 通过 ps -ef|gerp nginx 查看新的 Nginx 服务是否正常
- 将旧服务平滑停止
-
-
Nginx 服务器基础配置指令
-
nginx.conf 文件结构
-
全局块
全局块主要设置一些影响 Nginx 服务器整体运行的指令
-
events 块
events 块涉及的指令主要影响 Nginx 与服务器用户的网络连接。
-
http 块
http 块是 Nginx 服务器配置中的重要组成部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都放在这个模块中。
-
server 块
server 块使得 Nginx 服务器在同一台机器上运行一个 Nginx 进程就可以运行多个网站
每个 http 块可以包含多个 server 块,每个 server 块就相当于一个虚拟主机
-
location 块
每个 server 块可以包含多个 location块,location块的主要作用是基于 Nginx 服务器收到的请求字符串,随除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。
-
-
配置运行 Nginx 服务器用户组(全局块)
-
user user [group]
- user 指可以运行 Nginx 服务器的用户
- group 可选项,指定运行 Nginx 的用户组
- 只有被设置的用户及用户组才有权限启动 Nginx 进程。
- 若希望所有用户都可以启用 Nginx 则可以将指令注释掉或者将用户(和用户组)设置为 Nobody。
-
-
配置允许生成的 worker process 数(全局块)
- work process 是 Nginx 服务器实现并发处理服务的关键所在,理论上讲, worker process 越多,并发处理量越多。
-
配置允许生成 worker process 的指令是 worker_process,其语法格式:
worker_process number |auto
- number 指 Nginx 最多产生的 worker process 数。
- auto 设置此值,Nginx 将自动检测。
-
配置 Nginx 进程 PID 存放路径(全局块)
-
Nginx 支持对 PID存放路径进行修改。
pid file
-
-
配置错误日志的存放路径(全局块,http块,server块 location块)
-
在全局块、http 块、和 server 块中都可以对 Nginx 服务器的日志进行相关配置。
error_log file | stderr [debug|info|notice|warn|error|crit|alert|emerg]
- file 将 日志固定输出到某一文件
- stderr 输出到标准输出 stderr
- 日志的级别是可选项,由低到高 debug-emerg
- 设置某一级别后,比这一级别高的日志也会被记录
-
-
配置文件引入(任意位置)
-
当需要将 Nginx 配置或者第三方模块配置引入当前主配置文件当中时,使用 include 引入
include file
-
-
设施网络连接的序列化(event块)
-
accept_mutex 默认设置开启,将会对多个 Nginx 进程接收连接进行序列化,防止多个进程对连接争抢
accept_mutex on | off
-
-
设置是否允许同时使用多个网络连接(event块)
- multi_accept on |off
- 此指令默认为关闭状态,即每个 worker process 只能接受一个新到达的网络连接。
-
事件驱动模型选择(events)
Nginx 提供多种事件驱动模型来处理网络消息,语法结构为
use method
method 可选择的内容有:select,poll,kqueue,epoll,rtsig,/dev/poll,eventport
-
配置最大连接数(events)
-
指令 worker_connections 主要用来设置允许每一个 worker process 同时开启的最大连接数
worker_connections number
-
-
定义 MINE-Type
include mime.type;
default_type application/octet-stream
- 第一行导入外部引用 mime_type 文件,在 mime_type 文件中,定义了一个 types,用于定义 MIME 文件
-
第二行使用 指令 default_type 配置了用于处理前端请求的 MIME 类型,语法结构为:
default_type mime-type
mime-type 为 types 块中定义的 MEME-type 如果不加次指令,默认为 test/plain
-
自定义服务器日志(http)
-
access_log path [format[buffer=srze]]
path 配置服务日志的文件存放路径和名称
format,可选项,自定义服务日志的格式字符串,也可以通过"格式的名称"使用 log_format指令定义好的格式。"格式串的名称" 在 log_format指令中定义。
size,配置临时缓冲区的大小。
- 此指令的默认配置为 access_log logs =/access.log combined;
- 取消记录服务日志功能:access_log off;
-
-
配置允许 sendfile 方式传输文件(http server location)
- 语法结构:sendfile on |off;
- sendfile 用于开启或者关闭使用 sendfile() 传输文件 默认值为 off
- sendfile_max_chunk size;size 如果大于 0 ,则每个 work process 每次调用 sendfile 传输的数据量最大不能超过此值,如果设置为0,则无限制。
- 此指令可在 http 块,server 块或 location 块中配置
-
配置连接超时时间(http server location)
- 与用户建立会话后,Nginx 服务器可以保持这些连接打开一段时间
-
keepalive_timeout timeout[header_timeout];
- timeout:服务器端对连接的保持时间。默认 75s
- header_timeout:在应答报文头部的 keep_Alive 设置超时时间
-
单链接请求数上限(server location)
- keepalive_requests number;
- Nginx 服务器与用户建立回话连接后,用户通过此连接发送请求,keeoalive_requests 用于限制用户通过某一连接向 Nginx 发送请求的次数。默认设置为 100。
-
配置网络监听
-
配置监听的 ip 地址:
listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=szie] [sndbuf=size] [deferred]
[accept_file=filter] [bind] [ssl]
-
配置监听端口:
listen port [default_server] [setfib=number] [backlog=number] [rcvbuf=szie] [sndbuf=size] [accept_file=filter]
[deferred] [bind] [ipv6only=on/off] [ssl]
-
参数解释:
- address : IP 地址,如果是 IPV6 地址,需要用 '[]' 括起来。
- port : 端口号,如果之定义了 IP 地址,默认使用 80 端口。
- path : socket 文件路径,如 /var/run/nginx.sock 等。
- default_server : 标识符,将此虚拟机市值为 address:port 的默认主机。
- setfib=number : 监听 socket 关联路由表 不常用。
- backlog=number : 设置监听函数 listen() 最多允许多少网络连接同时处于挂起状态,默认为 511.
- rcvbuf=size : 设置监听 socket接收缓存区大小。
- sudbuf=zize : 设置监听 socket 发送缓存区大小。
- deferred:标识符,将 accept 设置为 Deferred 模式。
- accept_filter=filter 设置监听端口对请求的过滤,被过滤内容不能被接受和处理。
- bind : 标识符,使用独立的 bind() 处理此 address:port;一般情况下,对于端口相同而 IP 地址不同的多个连接,Nginx 服务器将只使用一个监听命令。
- ssl 标识符,设置会话连接使用 ssl 模式
-
listen 使用的默认设置:
listen *:80 | *:8000
-
-
基于名称的虚拟主机配置
-
配置主机的名称的指令为 server_name 其语法结构为:
server_name name name …;
- 实例 : server_name myserver.com www.myserver.com; Nginx 规定,第一个虚拟主机名称为此虚拟机的主要名称。
- name 支持通配符与正则表达式,其中通配符只能用在三段字符串的组成的名称的首段与尾端。
-
一个名称可能会和多个虚拟主机匹配成功,优先级如下:
- 准确匹配
- 通配符在开始匹配
- 通配符在结尾匹配
- 正则表达式匹配
-
-
基于 IP 的虚拟主机配置
-
为网卡添加 IP 别名(将在重启后失效)
ifconfig ens33:0 192.168.1.125 netmask 255.255.255.0 up
ifconfig ens33:1 192.168.1.126 netmask 255.255.255.0 up
加入开机启动项:
echo 'ifconfig ens33:0 192.168.1.125 netmask 255.255.255.0 up' >/etc/rc.local
echo 'ifconfig ens33:1 192.168.1.126 netmask 255.255.255.0 up' >/etc/rc.local
- server_name:adder
-
-
配置 location 块
-
location 的语法结构为:
location [ = | ~ | ~* | ^~ ] uri {…}
-
uri 变量是待匹配的请求字符串:可以是标准 uri 或 正则 uri。
- " = "用于标准 uri 前,要求请求字符串与 uri 严格匹配。如果已经匹配,就停止向下搜索并立即处理此请求。
- " ~ "用于表示 uri 包含正则表达式,并区分大小写。
- " ~ " 用于表示 uri 包含正则表达式,不区分大小写。
- " ^~ "用于标准 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求做匹配。
-
-
配置请求根目录
-
web 服务器收到网络请求后 需要在服务端指定目录寻找资源 。语法结构为:
root path;
-
此指令可以在 http 块,server 块,location 块中配置,但通常在 location 中
location /data/
{
root /locationestl
- 此指令指向 "/locationestl/data/"
-
-
更改 location 的 URI
-
在 location 中,除了使用 root 指明请求处理的根目录以外,还可以使用 alias 指令改变 location 接收到的 URL 请求lujing
alias path; path 为修改后的根目录
-
-
设置网站的默认首页
-
指令 index 用于设置网站的默认首页。
index file …;
-
-
设置网站的错误页面
-
语法结构:
error_page code ... [=[]response] uri
- code 要处理的 HTTP 错误代码;
- response:可选项,将 code 指定的错误代码转换为新的错误代码 response。
- uri: 错误页面的路径或者网站地址。路径为 Nginx 服务器 html 路径下的相对路径。
-
示例:
- error_page 404 /404.html
- error_page 503 http://somewebsite/forbidden.html;
-
-
基于 IP 配置 Nginx 的访问权限
-
allow 指令用于设置允许访问 Nginx 的客户端 IP 。
allow address | CIDR | all;
- address:允许访问的客户端 IP,不支持同时设置多个,如果需要设置多个,需要重复使用 allow 指令。
- CIDR:允许访问的客户端 CIDR 地址,如 202.80.18.23/25,前面的 32 位 IP 地址,后面 /25 代表该 IP 地址前 25位为网络部分,其余代表主机部分。
- all:代表允许所有客户端访问
-
deny 指令用于设置禁止访问 Nginx 的客户端 IP。
- address:禁止访问的客户端 IP,不支持同时设置多个,如果需要设置多个,需要重复使用 allow 指令。
- CIDR:禁止允许访问的客户端 CIDR 地址,如 202.80.18.23/25,前面的 32 位 IP 地址,后面 /25 代表该 IP 地址前 25位为网络部分,其余代表主机部分。
- all:代表不允许所有客户端访问
-
-
基于密码配置 Nginx 的访问权限。
-
auth_basic 用于开启或关闭该认证功能
-
auth_basic string | off
- string 开启该功能,并配置验证时的指定信息。
-
-
auth_basic_user_file 用于设置包含用户名及密码信息的文件路径,其语法结构为:
-
auth_basic_user_file file
- 其中 file 为密码文件的绝对路径;
-
明文密码格式如下:
name1:password1
name2:password2:comment
name3:password3
-
密码加密方式:
htpasswd -c -d /nginx/conf/pass_file username
-
-
-
-
Nginx 基础配置实例
-
配置文件内容
###全局快开始### user nobody nobody; #配置允许运行 Nginx 服务器的用户和用户组 worker_processes 3; #配置允许 Nginx 进程 =生成的 worker process 数 error_log logs/error.logs; #配置 Nginx 服务器运行对错误日志的存放路径。 pid logs/nginx.pid; #配置 Nginx 服务器运行时的 PID 文件存放路径和名称 ###全局块结束### ###events 块结束 ### events { use epoll; #配置事件驱动模型 worker_connections 1024; #配置最大连接数 } ###events块结束 ### ### http 块开始 ### http{ include mime.types; #定义 MIME-Type default_type application/octet-stream; sendfile on; #配置允许使用 sendfile 方式传输。 keepalive_timeout 65; #配置连接超时时间 log_format access.log #配置请求处理日志法的格式 '$remote_addr-[$time_local]-"$request"-"$http_user-agent"'; #### server 块 开始 #### ####配置虚拟主机 server{ listen 8081; #配置监听端口和主机名称 server_name myServer1; access_log /myweb/server1/log/access.log; #配置请求处理日志存放路径 error_page 404 /404.html; #配置错误页面 location /server1/location1 { #配置 /server1/location1 请求的 location root /myweb; index index.svr1-loc1.html; } location /server1/location2{ root /myweb; index index.svr1-loc2.html; } } server { listen 8082; #配置监听端口和主机名称 server_name 192.168.1.120; access_log /myweb/server2/log/access.log; #配置请求处理日志存放路径 error_page 404 /404.html; #配置错误页面 location /server2/location1 { #配置 /server1/location1 请求的 location root /myweb; index index.svr2-loc1.html; } location /server2/location2{ root /myweb; index index.svr2-loc2.html; } location = /404.html{ root /myweb/; index 404.html; } } }
-
配置的静态页面文件结构
[root@localhost logs]# tree /myweb
/myweb
├── 404.html
├── server1
│ ├── location1
│ │ └── index.svr1-loc1.html
│ ├── location2
│ │ └── index.svr1-loc2.html
│ └── log
│ └── access.log
└── server2
├── location1
│ └── index.svr2-loc1.html
├── location2
│ └── index.svr2-loc2.html
└── log
└── access.log
-