Nginx的配置文件的组成部分:
- 主配置文件:nginx.conf
- 子配置文件:include conf.d/*.conf
全局配置
nginx 有多种模块
- 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能
- 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等
- 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
- 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
- Stream服务模块: 实现反向代理功能,包括TCP协议代理
- 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等
- 关闭版本或修改版本
查看nginx版本信息
关闭版本号
[root@localhost ~]# vim /etc/nginx/nginx.conf //修改配置信息
http { //在http语句块中进行修改
server_tokens off; //关闭版本
[root@localhost ~]# nginx -s reload //重新加载
`注意:`这是唯一一个调优是在http 语句块的,其他都在全局
- 修改启动的进程数
worker_processes 1;
#系统默认允许的启动工作进程数数量,和你真实的cpu数量有关
worker_processes auto;
#如果设置为auto,是你真实的cpu数量
- cpu与work进程绑定
将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占一个核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
CPU序号:
CPU MASK: 00000001:0号CPU
00000010:1号CPU
................
10000000:7号CPU
worker_cpu_affinity 00000001 00000010 00000100 00001000;第0号---第3号CPU
#序号绑定cpu 亲缘性
worker_cpu_affinity 00000101 00001010;
#同一个work 可以绑定 两个cpu可以这么写 但是不建议,本来就是 不希望飘动,这样也是飘动
- nginx进程的优先级
当你想将nginx的work进程的优先级调高,可以使用nice设置。
worker_priority 0;
//工作进程优先级,-20~20(19)
- 调试work进程打开的文件的个数
nginx 默认所有子进程一共可以打开的文件数量有限,所以需要优化数值。
worker_rlimit_nofile 65536;
//所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制。
//最好与ulimit -n 或者limits.conf的值保持一致。
events块(nginx工作模式)
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。
`events I/O模型调优`
bash
events {
worker_connections 65536; //设置单个工作进程的最大并发连接数
use epoll;
//使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。
accept_mutex on;
//on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on
multi_accept on;
//ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
}
http块(http设置)
http 是一个大的语句块,包含若干个小的语句块(比如server语句块)
bash
http {
include /etc/nginx/mime.types;
#include 指令用于将其他文件或目录中的配置内容包含到当前位置。
...
... #各server的公共配置
server { #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
...
}
server {
...
server_name #虚拟主机名
root #主目录
#sever 下的 root指定了主页文件的位置
alias #路径别名
location [OPERATOR] URL { #指定URL的特性
...
if CONDITION {
...
}
}
}
}
server块(主机设置)
一个server就是一个虚拟主机
server作用:对主机的设置,例如端口号、ip地址、域名、主站点、日志 (具体参考官方文档)
1.1 server下的root
root指定了主页文件的位置
bash
server {
listen 80;
server_name www.pc.com;
root /data/html/;
location /cxk {
root /data/cxk
}
}
root 类似与追加
实际 你该访问的页面 是 /data/cxk/cxk/
1.2 server块 构建虚拟主机
基于域名
实验内容: 用一台服务器生成2个站点:手机端、pc端
实验步骤:
编辑主配置文件
bash
[root@node1 ~]# vim /apps/nginx/conf/nginx.conf //编辑主配置文件
http {
include mime.types;
include /apps/nginx/conf.d/*.conf; //添加include语句
default_type application/octet-stream;
server_tokens off;
[root@node1 ~]# nginx -s reload //重新加载
编辑子配置文件
bash
[root@node1 data]# mkdir {pc,phone} //建立pc、phone文件夹
[root@node1 data]# cd pc
[root@node1 pc]# echo pc > index.html //生成pc页面
[root@node1 pc]# cat index.html
pc
[root@node1 pc]# cd ..
[root@node1 data]# cd phone/
[root@node1 phone]# echo phone > index.html //生成phone页面
[root@node1 phone]# cat index.html
phone
[root@node2 ~]# vim /etc/hosts //编辑主机2配置文件,添加域名
172.16.88.8 www.pc.com www.phone.com
准备页面
bash
[root@node1 conf.d]# cd /apps/nginx/conf.d //切换到子配置文件目录下
[root@node1 conf.d]# vim pc.conf //编辑子配置文件pc.conf
server {
listen 80;
server_name www.pc.com;
root /data/pc/;
}
[root@node1 conf.d]# cp pc.conf m.conf
[root@node1 conf.d]# vim m.conf //编辑子配置文件m.conf
server {
listen 80;
server_name www.phone.com;
root /data/phone/;
}
[root@node1 conf.d]# nginx -t //检查文件格式
[root@node1 conf.d]# nginx -s reload //重新加载
验证
[root@node2 ~]# curl www.pc.com
pc
[root@node2 ~]# curl www.phone.com
phone
基于端口
`修改配置文件:`
[root@node1 conf.d]# vim pc.conf //编辑子配置文件pc.conf
server {
listen 9527;
server_name www.pc.com;
root /data/pc/;
}
[root@node1 conf.d]# vim m.conf //编辑子配置文件m.conf
server {
listen 80;
server_name www.phone.com;
root /data/phone/;
}
[root@node1 conf.d]# nginx -t //检查文件格式
[root@node1 conf.d]# nginx -s reload //重新加载
`准备页面`
`验证:`
[root@node2 ~]# curl 172.16.88.8
phone
[root@node2 ~]# curl 172.16.88.8:9527
pc
基于ip
`修改配置文件:`
[root@node1 conf.d]# vim pc.conf //编辑子配置文件pc.conf
server {
listen 172.16.88.8:80;
server_name www.pc.com;
root /data/pc/;
}
[root@node1 conf.d]# ifconfig ens33:0 172.16.88.100 //添加一个虚拟ip
[root@node1 conf.d]# vim m.conf //编辑子配置文件m.conf
server {
listen 172.16.88.100:80;
server_name www.phone.com;
root /data/phone;
}
[root@node1 conf.d]# nginx -s reload //重新加载
`准备页面`
`验证:`
[root@node2 ~]# curl 172.16.88.8
pc
[root@node2 ~]# curl 172.16.88.100
phone
alias 别名
alise相当于置换
bash
server {
listen 80;
server_name www.pc.com;
location /cxk {
root /data/cxk/;
//相当于追加,访问172.16.88.8/cxk等于访问172.16.88.8/data/cxk/cxk
}
location /cxk {
alias /data/;
//相当于替换,访问172.16.88.8/cxk就是访问172.16.88.8/data/
}
}
location块(URL匹配)
在一个server中location配置段可存在多个,用于实现从url到文件系统的路径映射。
语法规则:
|------|------------------|--------------------|
| 符号 | 含义 | 举例 |
| = | 精确匹配 | location =/cxk |
| ^~ | 以什么开头 | location ^~ /cxk |
| ~ | 开启正则表达式,区分大小写 | location ~ /cxk |
| ~* | 开启正则表达式,不区分大小写 | location ~* /cxk |
| 不加符号 | 匹配起始于此uri的所有的uri | location /cxk |
匹配优先级从高到低: => ^~> ~/~*>不带符号
`前缀匹配:` = ^~ 不带符号
`正则匹配:` ~ ~*
先找出所有的前缀匹配,最后再看正则匹配