Nginx - 配置文件详解
# Nginx - 配置详解
前言
Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务器、反向代理、负载均衡、内容缓存等场景。本节将详细介绍 Nginx 的配置、请求处理顺序、location
指令的匹配规则,以及 proxy_pass
指令的用法。
# 1. Nginx 请求处理顺序
Nginx 处理请求的顺序如下:
监听端口:
- Nginx 根据配置文件中的
listen
指令监听特定的端口,如 80(HTTP)和 443(HTTPS)。这是 Nginx 处理请求的第一步。 - 例如,如果配置文件中有多个
server
块监听同一端口,Nginx 会继续根据请求的主机名(Host header)来区分处理。
- Nginx 根据配置文件中的
匹配主机名(域名):
- Nginx 根据请求中的主机名(例如
Host: example.com
)匹配对应的server_name
指令。如果多个server
块匹配相同的主机名,Nginx 会使用配置文件中第一个匹配的server
块。 - 这一步是为了确定具体使用哪个
server
块来处理请求。
- Nginx 根据请求中的主机名(例如
匹配
location
:- 在选定的
server
块中,Nginx 会根据location
指令进一步匹配请求的 URI(即请求路径)。 location
指令有一套复杂的匹配规则(详见下文),用于确定如何处理请求。例如,请求/api/v1/resource
可能匹配到location /api/
。
- 在选定的
请求处理:
- Nginx 根据匹配到的
location
规则处理请求。这可能涉及到静态文件的提供、反向代理到后端服务器、URL 重写等操作。
- Nginx 根据匹配到的
# 2. location
指令的匹配规则
location
指令用于定义如何处理特定路径的请求。Nginx 支持多种类型的 location
匹配方式,匹配的优先级如下:
精确匹配 (
=
):- 格式:
location = /exact/path { ... }
- 说明:仅当请求的 URI 与指定路径完全相同时才会匹配。适用于对特定路径的精确控制。
- 格式:
前缀匹配 (
^~
):- 格式:
location ^~ /static/ { ... }
- 说明:如果请求的 URI 以指定路径为前缀,并且找到了匹配项,则直接使用此规则,不再继续进行正则匹配。适用于对某个目录下所有资源的匹配。
- 格式:
正则表达式匹配 (
~
和~*
):- 区分大小写的正则匹配:
location ~ /regex/ { ... }
- 不区分大小写的正则匹配:
location ~* /regex/ { ... }
- 说明:使用正则表达式匹配请求的 URI,并且在找到第一个匹配项后立即使用,不再继续匹配。适用于复杂的 URI 模式匹配。
- 区分大小写的正则匹配:
前缀匹配(默认方式):
- 格式:
location /prefix/ { ... }
- 说明:如果请求的 URI 以指定路径为前缀,且没有更优先级的规则匹配,则使用此规则。Nginx 默认按这种方式进行匹配。
- 格式:
Nginx 会按照上述优先级顺序依次匹配 location
,找到最合适的规则后停止匹配并处理请求。
# 3. proxy_pass
指令的使用与场景详解
proxy_pass
是 Nginx 实现反向代理功能的核心指令。它将客户端的请求转发给另一个服务器,并将后端服务器的响应返回给客户端。以下是 proxy_pass
的使用方法及各种应用场景。
# 3.1. 基本用法
location /api/ {
proxy_pass http://backend.example.com;
}
2
3
在这个配置中,所有 /api/
下的请求都会被代理到 http://backend.example.com
。Nginx 会转发请求,并将后端服务器的响应返回给客户端。
# 3.2. URI 处理规则
# 1. 带路径的 proxy_pass
规则:如果
proxy_pass
后面指定了一个路径(例如http://backend.example.com/app/
),Nginx 会将匹配的location
部分从客户端请求的 URI 中移除,并将剩余部分附加到proxy_pass
后面的路径上。举例:
location /api/ { proxy_pass http://backend.example.com/app/; }
1
2
3- 客户端请求:
http://nginx-server/api/get-data
- Nginx 处理:
- 匹配到
location /api/
- 移除
/api/
,剩下/get-data
- 将
/get-data
附加到proxy_pass
指定的路径/app/
- 匹配到
- 最终请求:
http://backend.example.com/app/get-data
- 客户端请求:
# 2. 不带路径的 proxy_pass
规则:如果
proxy_pass
后面没有指定路径(例如http://backend.example.com
),Nginx 会将匹配的location
部分保留,并直接将整个请求 URI 转发给后端服务器。举例:
location /api/ { proxy_pass http://backend.example.com; }
1
2
3- 客户端请求:
http://nginx-server/api/get-data
- Nginx 处理:
- 匹配到
location /api/
- 不移除
/api/
,保留完整的请求 URI
- 匹配到
- 最终请求:
http://backend.example.com/api/get-data
- 客户端请求:
# 3. 特殊情况/
- 域名或 IP 后面有
/
:如果
proxy_pass
指令后面包含一个/
,即使没有指定路径,也会被视为带路径的情况。例如:proxy_pass http://backend.example.com/;
1在这种情况下,即使没有额外的路径部分(如
app/
),Nginx 仍会将匹配的location
部分从 URI 中移除,然后将剩余部分附加到后面的/
。举例:
location /api/ { proxy_pass http://backend.example.com/; }
1
2
3- 客户端请求:
http://nginx-server/api/get-data
- Nginx 处理:
- 匹配到
location /api/
- 移除
/api/
,剩下/get-data
- 匹配到
- 最终请求:
http://backend.example.com/get-data
- 客户端请求:
总结来说,proxy_pass
后面如果带有路径(包括一个单独的 /
),Nginx 会替换 location
部分并附加剩余 URI。如果没有路径,Nginx 则保留 location
匹配的 URI 部分并直接转发给后端。
# 3.3.^~ /api/
、/api
与 /api/
的区别
# 1. location ^~ /api/
匹配方式:前缀匹配,但优先级高于正则表达式匹配。
匹配规则:
location ^~ /api/
表示当请求 URI 以/api/
开头时,Nginx 会立即使用这个配置块,而不会再继续尝试其他更低优先级的匹配(包括正则表达式匹配)。使用场景:适用于希望匹配某个路径前缀,并且避免其他复杂匹配规则(如正则)的情况。通常用于排除一些细粒度的匹配规则。
匹配示例:
http://example.com/api/
http://example.com/api/v1/get-data
不会匹配:
http://example.com/api
(因为少了斜杠/
)http://example.com/apitest
# 2. location /api
匹配方式:普通的前缀匹配。
匹配规则:
location /api
表示匹配所有以/api
开头的 URI。它的优先级低于^~
和精确匹配(=
),但高于正则表达式匹配。使用场景:适用于匹配所有
/api
开头的请求路径,灵活且广泛。匹配示例:
http://example.com/api
http://example.com/api/get-data
http://example.com/api/v1/
不会匹配:
http://example.com/apitest
# 3. location /api/
匹配方式:普通的前缀匹配。
匹配规则:
location /api/
仅匹配以/api/
开头的 URI。比location /api
更严格,因为它不匹配/api
本身,只匹配带斜杠/
的路径。使用场景:适用于需要明确区分
/api
和/api/
的情况,确保匹配到的是一个路径而非类似/api
这样的资源。匹配示例:
http://example.com/api/
http://example.com/api/v1/get-data
不会匹配:
http://example.com/api
http://example.com/apitest
实际开发建议
- 开始时使用宽泛匹配:在开发的早期阶段,使用
location /api
这样的宽泛匹配规则可以更快地进行测试和开发。 - 根据需求调整:随着项目的发展,了解了具体的路径需求后,可以逐步引入更严格的匹配规则(如
^~
或/api/
),以提高精确性和性能。
# 3.4. 使用变量进行动态代理
proxy_pass
可以结合 Nginx 的变量使用,动态决定代理目标:
location /api/ {
set $backend "http://backend1.example.com"; # 设置默认的后端服务器地址。
if ($request_uri ~* "/api/v2/") { # 如果请求的 URI 匹配 "/api/v2/"(不区分大小写)。
set $backend "http://backend2.example.com"; # 将后端服务器地址更改为 backend2。
}
proxy_pass $backend; # 将请求代理到动态设置的后端服务器。
}
2
3
4
5
6
7
在这个例子中,Nginx 会根据请求的 URI 动态选择后端服务器。这种方式适用于多后端服务的场景。
# 3.5. 支持 HTTPS 的反向代理
Nginx 支持代理 HTTPS 请求:
location /api/ {
proxy_pass https://backend.example.com; # 将请求代理到支持 HTTPS 的后端服务器。
}
2
3
在这个配置中,Nginx 会与后端服务器建立安全的 TLS 连接,从而安全地转发请求和响应。
# 3.6. 设置请求头
在代理请求时,Nginx 通常会设置一些 HTTP 请求头,以传递客户端的相关信息给后端服务器:
location /api/ {
proxy_pass http://backend.example.com; # 将请求代理到后端服务器。
proxy_set_header Host $host; # 设置 Host 请求头,传递客户端请求的主机信息。
proxy_set_header X-Real-IP $remote_addr; # 设置 X-Real-IP 请求头,传递客户端的真实 IP 地址。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置 X-Forwarded-For 请求头,传递客户端和代理链的 IP 地址。
}
2
3
4
5
6
Host
:传递客户端请求的主机信息。X-Real-IP
:传递客户端的真实 IP 地址。X-Forwarded-For
:传递客户端和代理链的 IP 地址。
这些设置对于后端服务器了解请求来源非常重要,尤其是在负载均衡和日志记录中。
# 3.7. WebSocket 代理
代理 WebSocket 时,需要配置连接升级(Upgrade)和保持连接(Connection):
location /ws/ {
proxy_pass http://backend.example.com; # 将 WebSocket 请求代理到后端服务器。
proxy_http_version 1.1; # 设置 HTTP 协议版本为 1.1,这是 WebSocket 必需的。
proxy_set_header Upgrade $http_upgrade; # 设置 Upgrade 请求头,支持 WebSocket 的协议升级。
proxy_set_header Connection "upgrade"; # 设置 Connection 请求头,保持连接,WebSocket 必需。
proxy_set_header Host $host; # 设置 Host 请求头,传递客户端的主机信息。
}
2
3
4
5
6
7
WebSocket 连接需要 HTTP/1.1 协议支持,并且必须配置 Upgrade
和 Connection
请求头,Nginx 才能正确代理 WebSocket 流量。
# 3.8. 负载均衡配置
proxy_pass
可以与 upstream
指令结合,实现负载均衡:
upstream backend {
server backend1.example.com; # 定义第一个后端服务器。
server backend2.example.com; # 定义第二个后端服务器。
}
location /api/ {
proxy_pass http://backend; # 将请求代理到 `upstream` 定义的服务器组,进行负载均衡。
}
2
3
4
5
6
7
8
在这个配置中,Nginx 会根据负载均衡算法,将请求分配到不同的后端服务器,常用的算法包括轮询(默认)、最少连接数等。
# 3.9. 超时与重试策略
为代理请求设置超时和重试策略,有助于提升服务的稳定性:
location /api/ {
proxy_pass http://backend.example.com; # 将请求代理到后端服务器。
proxy_connect_timeout 5s; # 设置与后端服务器建立连接的超时时间为 5 秒。
proxy_send_timeout 10s; # 设置发送请求到后端服务器的超时时间为 10 秒。
proxy_read_timeout 10s; # 设置从后端服务器读取响应的超时时间为 10 秒。
}
2
3
4
5
6
proxy_connect_timeout
:与后端服务器建立连接的超时时间。如果在指定时间内无法建立连接,Nginx 会终止请求。proxy_send_timeout
:发送请求到后端服务器的超时时间。如果在指定时间内无法发送完请求数据,Nginx 会终止请求。proxy_read_timeout
:从后端服务器读取响应的超时时间。如果在指定时间内无法接收响应数据,Nginx 会终止请求。
这些超时设置可以有效避免后端服务不可用时,Nginx 长时间等待导致的资源浪费。
# 4. HTTPS 重定向配置
为了确保所有 HTTP 请求都通过 HTTPS 安全传输,可以配置 Nginx 自动重定向 HTTP 请求到 HTTPS。以下是常见的 HTTPS 重定向配置示例:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
2
3
4
5
在这个配置中,Nginx 监听 80 端口(HTTP),并将所有请求重定向到 HTTPS(443 端口)。这种配置非常常见,用于确保所有流量都通过 HTTPS 加密传输。
# 4.1. 重定向的端口配置
自定义端口重定向:你可以指定任意端口来监听 HTTP 请求并进行重定向。例如:
server { listen 8080; server_name example.com; return 301 https://$host$request_uri; }
1
2
3
4
5在这个例子中,Nginx 监听 8080 端口,并将请求重定向到 HTTPS。这种配置适用于需要在特定端口处理 HTTP 请求的场景。
统一管理端口:通常情况下,所有 HTTP 请求都在 80 端口监听,通过简单配置即可重定向到 HTTPS。例如:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
1
2
3
4
5这种配置可以简化管理,用户在浏览器中输入域名时,默认通过 80 端口访问,然后自动重定向到 HTTPS。
# 4.2. 80 和 443 端口的特殊性
80 端口:是 HTTP 的默认端口。如果在浏览器中输入
http://example.com
,浏览器会默认使用 80 端口。因此,通常不需要显式写出:80
。443 端口:是 HTTPS 的默认端口。如果在浏览器中输入
https://example.com
,浏览器会默认使用 443 端口,因此通常也不需要显式写出:443
。
# 4.3. 重定向的实践建议
对于大多数网站,建议所有重定向监听块都使用 80 端口,这样可以确保所有 HTTP 请求都被正确重定向到 HTTPS,并简化配置管理。
# 5. Nginx HTTP 配置示例
- 监听 80 端口:默认情况下,HTTP 协议使用端口 80。因此,配置
listen 80;
表示 Nginx 会监听所有发往端口 80 的请求。 - 监听其他非默认端口:除了 80 端口外,Nginx 也可以配置监听其他端口,比如 8080。在这种情况下,客户端需要显式地在 URL 中指定端口号(例如
http://example.com:8080
)。 - WebSocket 配置:Nginx 支持 WebSocket,配置时需要注意设置
proxy_http_version 1.1
,以及Upgrade
和Connection
头部,以支持协议升级。 - 如果是基于docker部署的,内部监听的什么端口号是无所谓的,最终我们都需要把这些端口号对外部进行一个映射,真正访问的是容器外部映射的端口。
events {
worker_connections 1024; # 设置最大连接数,即Nginx可以同时处理的最大连接数(可修改)。
}
http {
include mime.types; # 引入 MIME 类型定义文件,确定不同文件的 Content-Type。
default_type application/octet-stream; # 设置默认的 MIME 类型(可修改,如果文件类型未知则使用此类型)。
sendfile on; # 开启高效文件传输模式(可选,建议开启以提高文件传输效率)。
keepalive_timeout 65; # 设置客户端连接保持时间(单位:秒,可修改,通常设置为60秒或更长)。
client_max_body_size 50m; # 设置客户端上传文件的最大允许大小(可修改,默认单位为M字节)。
client_body_buffer_size 10m; # 设置客户端请求体缓存区的大小(可修改,缓存区大小决定了请求体可暂存的大小)。
client_header_timeout 1m; # 设置客户端请求头超时时间(可修改,超过此时间则断开连接)。
client_body_timeout 1m; # 设置客户端请求体超时时间(可修改,超过此时间则断开连接)。
gzip on; # 开启 Gzip 压缩(可选,建议开启以减少传输数据量)。
gzip_min_length 1k; # 设置进行 Gzip 压缩的最小文件长度(可修改,小于该大小的文件不会被压缩)。
gzip_buffers 4 16k; # 设置 Gzip 压缩使用的缓冲区大小(可修改,决定了每次压缩时使用的内存)。
gzip_comp_level 4; # 设置 Gzip 压缩等级(可修改,1-9 级别,数值越大压缩效果越好,但消耗CPU资源越多)。
gzip_types text/plain application/javascript text/css; # 设置 Gzip 压缩的文件类型(可修改,指定哪些文件类型应该被压缩)。
gzip_vary on; # 开启 Gzip Vary 头部支持(可选,建议开启以支持基于不同请求头的缓存策略)。
# 监听 80 端口的服务器配置
server {
listen 80; # 监听默认的 HTTP 端口 80。
server_name example.com www.example.com; # 定义主机名(可修改为你的域名,多个主机名用空格分隔)。
# 网站的根目录配置
location / {
root /var/www/html; # 设置网站的根目录(可修改为你的目录,指向网站文件存放的位置)。
index index.html index.htm; # 设置默认的首页文件(可修改,Nginx会首先查找这些文件)。
}
# 代理 /api/ 路径的请求到后端服务器
location ^~ /api/ {
proxy_pass http://服务器ip:8080/; # 将所有 /api/ 开头的请求代理到指定的后端服务器(可修改)。
proxy_set_header Host $host; # 设置 Host 请求头,传递客户端请求的主机信息(可选)。
proxy_set_header X-Real-IP $remote_addr; # 设置 X-Real-IP 请求头,传递客户端的真实 IP 地址(可选)。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置 X-Forwarded-For 请求头,传递客户端和代理链的 IP 地址(可选)。
}
# WebSocket 配置示例
location /websocket/ {
proxy_pass http://127.0.0.1:8080; # 将 WebSocket 请求代理到后端服务器(可修改)。
proxy_http_version 1.1; # 设置 HTTP 协议版本为 1.1(WebSocket 必须)。
proxy_set_header Upgrade $http_upgrade; # 支持 WebSocket 的协议升级(必需)。
proxy_set_header Connection "upgrade"; # 保持连接(必需,WebSocket 必须)。
proxy_set_header Host $host; # 设置 Host 请求头,传递客户端的主机信息(可选)。
}
}
# 其他非默认端口的服务器配置
server {
listen 8080; # 监听非默认的 HTTP 端口 8080(可修改)。
server_name api.example.com; # 定义另一个主机名(可修改为你的域名)。
# 接口服务的根目录配置
location / {
root /var/www/api; # 设置接口服务的根目录(可修改为你的目录)。
index index.html index.htm; # 设置默认的首页文件(可修改,通常用来返回API文档或者静态页面)。
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 6. Nginx HTTPS 配置示例
- 监听 443 端口:默认情况下,HTTPS 协议使用端口 443。因此,配置
listen 443 ssl;
表示 Nginx 会监听所有发往端口 443 的 HTTPS 请求。 - HTTPS 重定向:为了强制用户使用 HTTPS,可以在 80 端口上配置重定向,将所有 HTTP 请求重定向到 HTTPS。例如,将
http://example.com
重定向到https://example.com
。 - WebSocket 配置:HTTPS 下的 WebSocket 配置与 HTTP 基本相同,只是需要确保在
proxy_pass
中使用 HTTPS URL。
events {
worker_connections 1024; # 设置最大连接数,即Nginx可以同时处理的最大连接数(可修改)。
}
# HTTPS 配置部分
http {
include mime.types; # 引入 MIME 类型定义文件,确定不同文件的 Content-Type。
default_type application/octet-stream; # 设置默认的 MIME 类型(可修改)。
sendfile on; # 开启高效文件传输模式(可选,建议开启)。
keepalive_timeout 65; # 设置客户端连接保持时间(单位:秒,可修改)。
client_max_body_size 50m; # 设置客户端上传文件的最大允许大小(可修改)。
client_body_buffer_size 10m; # 设置客户端请求体缓存区的大小(可修改)。
client_header_timeout 1m; # 设置客户端请求头超时时间(可修改)。
client_body_timeout 1m; # 设置客户端请求体超时时间(可修改)。
gzip on; # 开启 Gzip 压缩(可选,建议开启)。
gzip_min_length 1k; # 设置进行 Gzip 压缩的最小文件长度(可修改)。
gzip_buffers 4 16k; # 设置 Gzip 压缩使用的缓冲区大小(可修改)。
gzip_comp_level 4; # 设置 Gzip 压缩等级(可修改,1-9 级别)。
gzip_types text/plain application/javascript text/css; # 设置 Gzip 压缩的文件类型(可修改)。
gzip_vary on; # 开启 Gzip Vary 头部支持(可选,建议开启)。
# 监听 443 端口的 HTTPS 服务器配置
server {
listen 443 ssl; # 监听 HTTPS 默认端口 443。
server_name example.com www.example.com; # 定义主机名(可修改为你的域名)。
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/example.com.crt; # SSL 证书路径(可修改为你的路径)。
ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL 证书密钥路径(可修改为你的路径)。
ssl_session_timeout 5m; # 设置 SSL 会话超时时间(可修改)。
ssl_ciphers HIGH:!aNULL:!MD5; # 设置 SSL 加密算法(可修改)。
ssl_protocols TLSv1.2 TLSv1.3; # 设置支持的 SSL/TLS 协议版本(可修改)。
ssl_prefer_server_ciphers on; # 优先使用服务器的加密算法(可选,建议开启)。
# 网站的根目录配置
location / {
root /var/www/html; # 设置网站的根目录(可修改为你的目录)。
index index.html index.htm; # 设置默认的首页文件(可修改)。
}
# WebSocket 配置示例
location /websocket/ {
proxy_pass http://127.0.0.1:8080; # 将 WebSocket 请求代理到后端服务器(可修改)。
proxy_http_version 1.1; # 设置 HTTP 协议版本为 1.1(可选,WebSocket 必须)。
proxy_set_header Upgrade $http_upgrade; # 支持 WebSocket 的协议升级。
proxy_set_header Connection "upgrade"; # 保持连接(WebSocket 必须)。
proxy_set_header Host $host; # 传递主机头信息(可选)。
}
}
# HTTPS 重定向配置
server {
listen 80; # 监听 HTTP 默认端口 80。
server_name example.com www.example.com; # 定义主机名(可修改为你的域名)。
# 重定向到 HTTPS
location / {
return 301 https://$host$request_uri; # 强制将所有请求重定向到 HTTPS。
}
}
# 其他非默认端口的 HTTPS 服务器配置
server {
listen 8443 ssl; # 监听非默认的 HTTPS 端口 8443(可修改)。
server_name api.example.com; # 定义另一个主机名(可修改为你的域名)。
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/api.example.com.crt; # SSL 证书路径(可修改为你的路径)。
ssl_certificate_key /etc/nginx/ssl/api.example.com.key; # SSL 证书密钥路径(可修改为你的路径)。
ssl_session_timeout 5m; # 设置 SSL 会话超时时间(可修改)。
ssl_ciphers HIGH:!aNULL:!MD5; # 设置 SSL 加密算法(可修改)。
ssl_protocols TLSv1.2 TLSv1.3; # 设置支持的 SSL/TLS 协议版本(可修改)。
ssl_prefer_server_ciphers on; # 优先使用服务器的加密算法(可选,建议开启)。
# 接口服务的根目录配置
location / {
root /var/www/api; # 设置接口服务的根目录(可修改为你的目录)。
index index.html index.htm; # 设置默认的首页文件(可修改)。
}
# 代理 /api/ 路径的请求到后端服务器
location ^~ /api/ {
proxy_pass https://服务器ip:8080/; # 将所有 /api/ 开头的请求代理到指定的后端服务器(可修改)。
proxy_set_header Host $host; # 设置 Host 请求头,传递客户端请求的主机信息(可选)。
proxy_set_header X-Real-IP $remote_addr; # 设置 X-Real-IP 请求头,传递客户端的真实 IP 地址(可选)。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置 X-Forwarded-For 请求头,传递客户端和代理链的 IP 地址(可选)。
}
# WebSocket 配置示例
location /ws/ {
proxy_pass http://127.0.0.1:9090; # 将 WebSocket 请求代理到后端服务器(可修改)。
proxy_http_version 1.1; # 设置 HTTP 协议版本为 1.1(WebSocket 必须)。
proxy_set_header Upgrade $http_upgrade; # 支持 WebSocket 的协议升级。
proxy_set_header Connection "upgrade"; # 保持连接(WebSocket 必须)。
proxy_set_header Host $host; # 传递主机头信息(可选)。
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 可选配置与可修改配置
可选配置:
sendfile on;
:用于开启高效文件传输,建议开启。gzip
相关配置:用于开启并配置 Gzip 压缩,提高传输效率,建议开启。ssl_prefer_server_ciphers on;
:用于优先使用服务器的加密算法,建议开启。
可修改配置:
client_max_body_size
:可以根据具体需求调整客户端上传文件的最大大小。client_body_buffer_size
:可以根据具体需求调整客户端请求体的缓存区大小。keepalive_timeout
:可以根据具体需求调整客户端连接保持时间。ssl_certificate
和ssl_certificate_key
:需要根据实际的证书路径进行修改。server_name
:需要根据实际的域名进行修改。root
和index
:根据实际的项目根目录和默认文件进行修改。listen
端口号:非默认端口可以根据实际需求进行调整。
总结
- 除了
server
块(特别是listen
和 SSL 相关的配置)不同之外,HTTP 和 HTTPS 配置文件中的其他部分通常是相同的。这包括全局配置项(如sendfile
、gzip
配置等)以及location
块中的大部分内容,如反向代理设置、WebSocket 支持等。 - 在实际配置中,你可以在同一个 Nginx 配置文件中配置 HTTP 和 HTTPS 服务,只需要在各自的
server
块中进行特定的配置即可。这样可以避免重复配置相同的全局设置。