Nginx 配置简介
接下来使用 ubuntu 22.04
默认安装方式讲解 nginx
配置文件。
NGINX 软件目录
ubuntu@ubuntu:~$ tree /etc/nginx/
/etc/nginx/
├── conf.d
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── modules-available
├── modules-enabled
│ ├── 50-mod-http-geoip2.conf -> /usr/share/nginx/modules-available/mod-http-geoip2.conf
│ ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
│ ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
│ ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
│ ├── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
│ └── 70-mod-stream-geoip2.conf -> /usr/share/nginx/modules-available/mod-stream-geoip2.conf
├── nginx.conf
├── proxy_params
├── scgi_params
├── sites-available
│ └── default
├── sites-enabled
│ └── default -> /etc/nginx/sites-available/default
├── snippets
│ ├── fastcgi-php.conf
│ └── snakeoil.conf
├── uwsgi_params
└── win-utf
配置文件
默认配置文件为:
/etc/nginx/nginx.conf
其他目录:
/etc/nginx/sites-available/*
/etc/nginx/sites-enabled/*
然后查看一下配置文件,下面是的将注释删除之后的内容。
ubuntu@ubuntu:~$ cat /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
include 字段是加载别的文件,在 http 字段中只有最后的 include /etc/nginx/sites-enabled/*;
加载了内容,内容如下(删除注释之后)
ubuntu@ubuntu:~$ cat /etc/nginx/sites-enabled/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
可以看出配置文件结构为:
全局配置段
http 配置段
server 配置段
location 配置段
最小配置
worker_processes
启动进程数,worker_processes 1;
为1,表示开启一个业务进程worker_connections
单个业务进程可接受连接数,worker_connections 1024;
表示单个进程可以链接 1024 个请求include mime.types;
include mime.types; 引入http mime类型default_type application/octet-stream;
如果mime类型没匹配上,默认使用二进制流的方式传输。sendfile on;
使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
未开启 sendfile
开启 sendfile
全局配置段
主要是全局性的和服务级别的属性配置,常见的主要有以下几种设置:
user # 设置使用用户(worker)
worker_processes # 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
error_log # nginx 的错误日志
pid # nginx 服务启动时候 pid
events # 定义事件相关的属性
worker_connections # 一个进程允许处理的最大连接数
use # 定义使用的内核模型
http 配置段
主要配置 server 通用的一些配置
include mime.types; # 文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
sendfile on; # 开启高效文件传输模式。
autoindex on; # 开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; # 防止网络阻塞
tcp_nodelay on; # 防止网络阻塞
keepalive_timeout 120; # 长连接超时时间,单位是秒
gzip on; # 开启gzip压缩输出
Server 常见配置属性
常见样式
server {
listen 端口;
server_name 主机名;
...
}
server
配置段最重要的属性是 listen
和 server_name
。它们都是用于匹配并处理请求的。
作用:定义 Server
监听的 ip
和 port
,当 ip/port
匹配时候才进行下一步匹配
listen 属性
表现形式:
形式 | 描述 | 示例 | 完整示例 |
---|---|---|---|
IP:Port | 地址精确表示样式 | listen 10.10.10.10:99 | listen 10.10.10.10:99 |
IP | 自动监听 IP:80地址 | listen 10.10.10.10 | listen 10.10.10.10:80 |
Port | 自动监听 全地址:Port | listen 99或 [::]:99 | listen 0.0.0.0:99 |
default_server | 自动使用默认的地址 | listen default_server | listen localhost:80 |
使用原则:
首先将所有样式补全成 IP:Port ,然后匹配,匹配 Server 多,那么接着使用 Server_name 匹配
server_name 属性
作用:定义 Server 监听的域名,当域名匹配时候才进行下一步操作
表现形式:
格式 | 完整样式 | 前缀正则样式 | 后缀正则样式 | 禁止非法域名或IP |
---|---|---|---|---|
形式 | www.example.com | .example.com | www.example. | _ |
使用原则:
优先使用完整样式,然后使用前缀正则样式,最后使用后缀正则样式,如果正则样式相同的时候,匹配最长,否则就走非法规则。
非法域名/IP,表示请求到该主机上一个不存在的IP或者域名
root 属性
作用:定义 Server 相应请求的html文件所在路径
表现形式:
root /var/www/html;
index 属性
作用:定义响应请求后返回的文件名称或格式
表现形式:
index index.html index.htm index.nginx-debian.html;
return 属性
作用:定义响应请求后返回的 http 状态码
表现形式:
return 444;
虚拟主机
原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务
servername 匹配规则 我们需要注意的是 servername 匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。
完整匹配 我们可以在同一 servername 中匹配多个域名
server_name blog.zhengxinonly.com notes.zhengxinonly.com;
通配符匹配
server_name *.zhengxinonly.com
通配符结束匹配
server_name vod.*;
正则匹配
server_name ~^[0-9]+\.mmban\.com$;