Skip to content

Nginx 配置简介

接下来使用 ubuntu 22.04 默认安装方式讲解 nginx 配置文件。

NGINX 软件目录

txt
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

配置文件

默认配置文件为:

txt
/etc/nginx/nginx.conf

其他目录:

txt
/etc/nginx/sites-available/*
/etc/nginx/sites-enabled/*

然后查看一下配置文件,下面是的将注释删除之后的内容。

shell
ubuntu@ubuntu:~$ cat /etc/nginx/nginx.conf
nginx
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/*; 加载了内容,内容如下(删除注释之后)

shell
ubuntu@ubuntu:~$ cat /etc/nginx/sites-enabled/default
nginx
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;
        }
}

可以看出配置文件结构为:

txt
全局配置段
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 常见配置属性

常见样式

nginx
server {
  listen 端口;
  server_name 主机名;

  ...
}

server 配置段最重要的属性是 listenserver_name。它们都是用于匹配并处理请求的。

作用:定义 Server 监听的 ipport,当 ip/port 匹配时候才进行下一步匹配

listen 属性

表现形式:

形式描述示例完整示例
IP:Port地址精确表示样式listen 10.10.10.10:99listen 10.10.10.10:99
IP自动监听 IP:80地址listen 10.10.10.10listen 10.10.10.10:80
Port自动监听 全地址:Portlisten 99或 [::]:99listen 0.0.0.0:99
default_server自动使用默认的地址listen default_serverlisten localhost:80

使用原则:

首先将所有样式补全成 IP:Port ,然后匹配,匹配 Server 多,那么接着使用 Server_name 匹配

server_name 属性

作用:定义 Server 监听的域名,当域名匹配时候才进行下一步操作

表现形式:

格式完整样式前缀正则样式后缀正则样式禁止非法域名或IP
形式www.example.com.example.comwww.example._

使用原则:

优先使用完整样式,然后使用前缀正则样式,最后使用后缀正则样式,如果正则样式相同的时候,匹配最长,否则就走非法规则。

非法域名/IP,表示请求到该主机上一个不存在的IP或者域名

root 属性

作用:定义 Server 相应请求的html文件所在路径

表现形式:

nginx
root /var/www/html;

index 属性

作用:定义响应请求后返回的文件名称或格式

表现形式:

nginx
index index.html index.htm index.nginx-debian.html;

return 属性

作用:定义响应请求后返回的 http 状态码

表现形式:

nginx
return    444;

虚拟主机

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

servername 匹配规则 我们需要注意的是 servername 匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

完整匹配 我们可以在同一 servername 中匹配多个域名

nginx
server_name blog.zhengxinonly.com notes.zhengxinonly.com;

通配符匹配

nginx
server_name *.zhengxinonly.com

通配符结束匹配

nginx
server_name vod.*;

正则匹配

nginx
server_name ~^[0-9]+\.mmban\.com$;