nginx总结-配置文件
Nginx的配置文件目录
Nginx 配置文件的默认目录取决于安装方式:
通过包管理器(如 apt、yum、dnf)安装:
- 配置文件通常位于 /etc/nginx/ 目录下,主配置文件为 /etc/nginx/nginx.conf。
从源代码编译安装:
- 若未通过 --prefix 参数指定安装路径,默认配置文件目录为 /usr/local/nginx/conf/,主配置文件为 /usr/local/nginx/conf/nginx.conf。
检查当前运行的nginx使用的配置文件:
sudo nginx -t 2>&1 | grep "nginx.conf"
不加 2>&1(错误信息可能丢失),组合 2>&1:将标准错误合并到标准输出,使两者都通过管道 | 传递给 grep。
或
sudo ps aux | grep '[n]ginx' | grep -oE '--conf-path=[^ ]+'
注释
在 nginx.conf 的注释符号为: #
默认配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
配置结构说明
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- location块:配置请求的路由,以及各种页面的处理情况。
配置示例
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
全局块配置
# ====================== 全局块配置 ======================
# 1. 定义 Nginx 运行的用户和用户组(避免以 root 运行提升安全性)
user nginx www-data;
# 2. 设置 Nginx 进程数(通常设置为 CPU 核心数,auto 表示自动检测,默认是1)
worker_processes auto;
# 3. 全局错误日志路径及级别(debug|info|notice|warn|error|crit|alert|emerg),默认路径:/usr/local/nginx/logs/error.log
error_log /var/log/nginx/error.log warn;
# 4. 指定 PID 文件存储路径(记录 Nginx 主进程的 PID)默认是:/usr/local/nginx/logs/nginx.pid
pid /var/run/nginx.pid;
# 5. 设置每个 worker 进程可打开的最大文件描述符数 默认值:依赖系统限制(通常为 1024) ;高并发场景需调整,避免因文件描述符不足导致连接失败。
worker_rlimit_nofile 65535;
# 5. 控制 Nginx 是否以守护进程方式运行on/off,默认是:on,容器化部署时可能需关闭(off),以便与容器生命周期管理集成。
daemon on;
#引入其他配置文件(如 include /etc/nginx/conf.d/*.conf;)。模块化配置时使用,便于维护。
include /etc/nginx/modules-enabled/*.conf;
events块配置
events {
# 1. 每个 worker 进程的最大连接数(默认 512,建议根据系统调整)需小于系统 ulimit -n 限制,总连接数 = worker_processes × worker_connections
worker_connections 1024;
# 2. 指定事件驱动模型(Linux 下推荐 epoll,高效处理连接)
use epoll;
# 3. 是否允许一个 worker 同时接受多个新连接(默认 off,按需启用)提升高并发性能,但可能增加瞬时负载
multi_accept on;
# 4. 是否启用 accept 互斥锁(高并发时建议启用)避免多个 worker 争抢新连接(惊群效应)
accept_mutex on;
# 5. 互斥锁延迟时间(单位:毫秒,避免频繁争抢锁)减少锁争用频率,平衡性能与资源消耗
accept_mutex_delay 500ms;
}
http块配置
http 块用于定义全局的 HTTP 服务配置,影响所有 server 和 location 块。
http {
# 1. 引入 MIME 类型定义文件(用于 Content-Type 响应头)
include mime.types;
# 2. 默认 MIME 类型(当文件类型未匹配时使用)
default_type application/octet-stream;
# 3. 启用日志记录(访问日志格式和路径)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
# 4. 是否启用 sendfile 优化(零拷贝传输文件)
sendfile on;
# 5. 启用 TCP_NOPUSH 优化(仅在 sendfile 开启时有效)
tcp_nopush on;
# 6. 启用 TCP_NODELAY(禁用 Nagle 算法,提升实时性)
tcp_nodelay on;
# 7. 连接超时时间(客户端长时间无活动时关闭连接)
keepalive_timeout 65;
# 8. 客户端请求头缓冲区大小
client_header_buffer_size 4k;
# 9. 大请求头支持(防止溢出)
large_client_header_buffers 4 32k;
# 10. 客户端上传文件大小限制
client_max_body_size 10m;
# 11. Gzip 压缩配置(减少传输数据量)
gzip on;
gzip_min_length 1k; # 最小压缩文件大小
gzip_comp_level 2; # 压缩级别(1-9,越高 CPU 消耗越大)
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/json;
# 12. 隐藏 Nginx 版本号(安全优化)
server_tokens off;
# 13. 加载额外的配置文件(如虚拟主机配置)
include /etc/nginx/conf.d/*.conf;
}
配置优先级:
- http块中的全局配置在server和location块中也可以被覆盖配置,且server和location块中的配置优先级更高
- 比如上传文件大小控制client_max_body_size,优先级:location>server>http
include配置说明:
- 文件路径:可以是绝对路径或相对路径(相对于 Nginx 的配置目录,通常是 /etc/nginx/)
- 目录路径:如果指定的是目录,Nginx 会加载该目录下所有 .conf 文件(按字母顺序)。
- 支持通配符:例如 include /etc/nginx/conf.d/*.conf; 会加载 /etc/nginx/conf.d/ 下所有 .conf 文件。
- 场景:通常,我们会将每个虚拟主机的配置(server 块)单独存放,然后在 http 块中通过 include 引入它们。
- 优点:每个虚拟主机独立管理,便于启用/禁用(通过符号链接)。避免主配置文件过于臃肿。
- 优先级:后加载的配置会覆盖先加载的配置
示例:
http {
# 全局配置(如日志、超时、MIME 类型等)
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 引入所有虚拟主机配置
include /etc/nginx/sites-enabled/*.conf;
}
文件结构:
/etc/nginx/
├── nginx.conf # 主配置文件
├── mime.types # MIME 类型定义
├── sites-available/ # 存放虚拟主机配置(如 example.com.conf)
└── sites-enabled/ # 存放符号链接(指向 sites-available/ 下的文件)
server块配置
server 块是 Nginx 配置中用于定义虚拟主机的核心部分,允许在单个 Nginx 实例上托管多个域名或服务。每个 server 块可以独立配置监听端口、域名、根目录、SSL、路由规则等。
server {
# 1. 监听端口和 IP
listen 80;
# 2. #监听地址,域名或IP地址,用于匹配请求的主机
server_name example.com www.example.com;
# 3. 根目录和索引文件
root /var/www/html;
index index.html index.htm;
# 4. 日志配置
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
# 5. 路由规则(location 块)
location / {
try_files $uri $uri/ =404;
}
# 6. 错误页面重定向
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
internal;
}
location = /50x.html {
root /usr/share/nginx/html; # 错误页面路径
internal; # 禁止直接访问
}
}
listen
指定 server 块监听的 IP 和端口。
可以配置多个listen指令,以监听多个端口或IP地址。
如果多个server块监听相同的IP和端口,Nginx会使用匹配规则(server_name等)来决定哪个server块处理请求。
指令语法:
listen [IP地址]:端口 [选项];
-
IP地址(可选):指定服务器要监听的IP地址。可以是一个具体的IP地址,也可以是通配符,如
0.0.0.0(表示监听所有可用的IP地址)或*(表示监听所有IP地址,IPv4和IPv6)。如果不指定IP地址,默认情况下Nginx会监听所有可用的IP地址。 -
端口:指定服务器监听的端口号。通常,HTTP服务器使用80端口,HTTPS服务器使用443端口。端口号必须是一个整数。
-
选项(可选):可以附加一些选项来进一步配置监听行为。常见的选项包括:
default_server:将该server块标记为默认服务器块,用于处理未匹配到其他服务器块的请求。ssl:用于启用SSL/TLS支持,用于HTTPS服务器。http2:启用HTTP/2支持。reuseport:启用SO_REUSEPORT选项,用于更好地支持多核CPU环境。
常用格式:
listen 80; # 监听所有 IP 的 80 端口
listen 192.168.1.10:8080; # 监听指定 IP 的 8080 端口
listen 443 ssl; # 监听 443 端口并启用 SSL
listen [::]:80; # 监听 IPv6 的 80 端口
server_name
匹配请求的 Host 头,决定使用哪个 server 块。可以是域名/ip/_/""(空字符串)/通配符域名/正则表达式域名
可以指定多个域名,用空格或逗号分隔。
- domain_name:指定一个域名,用于匹配请求中的主机头(Host头部)。你可以指定多个域名,用空格或逗号分隔。例如,server_name example.com www.example.com; 表示这个server块会处理来自 example.com 和 www.example.com 的请求。
- ip_address:指定一个IP地址,用于匹配请求的目标IP地址。这通常用于将请求映射到特定的虚拟主机。
- _:特殊的占位符,表示匹配任何请求,如果没有匹配到其他server块的server_name,则会匹配到这个占位符的server块。
- ""(空字符串):如果没有设置任何server_name,或者所有的server_name都没有匹配成功,Nginx将会使用这个空字符串的server_name块作为默认虚拟主机。
- 通配符域名匹配:server_name *.example.com;
- 使用正则表达式匹配:server_name ~^www\..+\.com$; 这个配置使用正则表达式匹配以 www. 开头且以 .com 结尾的域名。
支持格式:
server_name example.com; # 精确匹配
server_name *.example.com; # 通配符匹配(如 a.example.com)
server_name ~^(?<subdomain>.+)\.example\.com$; # 正则匹配(捕获子域名)
优先级:精确匹配 > 通配符前缀 > 通配符后缀 > 正则匹配。
root
定义网站的根目录路径。
root /var/www/html; # 静态文件从 /var/www/html 加载
index
指定默认访问的文件名。可以配置多个
index index.html index.php; # 优先尝试 index.html,其次 index.php
access_log 和 error_log
记录访问日志和错误日志。
access_log /var/log/nginx/example.com.access.log; # 记录所有成功访问的请求(URL、客户端 IP、响应状态码等)。关闭日志(调试时使用):access_log off;
error_log /var/log/nginx/example.com.error.log warn; # 只记录警告及以上错误,记录错误日志(如 404、500 错误)。
日志级别:debug | info | notice | warn | error | crit | alert | emerg。
location 块
Nginx中的location块用于配置如何处理特定URL路径或模式的请求。location块通常包含一组指令,这些指令定义了如何处理与location块匹配的请求
如果存在多个完全相同的 location 块(如两个 location /api/),Nginx 会使用最后一个出现的配置,而忽略之前的所有重复配置。这是 Nginx 配置解析的基本规则:后定义的配置会覆盖先定义的同名配置。
根据请求 URI 匹配路由规则。
location [修饰符] 路径 { ... }
- 常见修饰符:
=:精确匹配(如location = /login)。~:正则匹配(区分大小写)。~*:正则匹配(不区分大小写)。^~:前缀匹配(优先于正则匹配)。- 无修饰符:普通前缀匹配。
alias:指定将请求映射到的实际文件系统路径。location /images/ {
alias /data/images/;
}
proxy_pass:用于反向代理请求到后端服务器。
location /api/ {
proxy_pass http://backend_server;
}
proxy_set_header 是Nginx配置中用于设置HTTP请求头的指令。它通常用于反向代理场景,允许你在将请求代理到后端服务器之前修改或添加HTTP请求头。
proxy_set_header Header-Name Header-Value;
proxy_set_header指令可以多次使用,以设置多个不同的HTTP请求头。- 使用
$variable语法,你可以在请求头中引用变量,如$remote_addr,$host,$scheme等。 $remote_addr:这个变量代表了客户端的IP地址,即发起请求的用户的IP地址。$host:这个变量代表了客户端请求中的"Host"头部,即请求的主机名。它通常用于传递请求的主机名给后端服务器,以确保后端服务器知道被请求的域名。$scheme:这个变量代表了客户端请求使用的协议(HTTP或HTTPS)。
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://backend_server;
}
root:指定将请求映射到的根目录。location /static/ {
root /var/www/html/;
}
try_files:配置Nginx尝试查找匹配的文件或路径。
location / {
try_files $uri $uri/ /index.html;
}
return:用于返回指定的HTTP响应代码和消息。
location /private/ {
return 403 "Access forbidden!";
}
fastcgi_pass:用于将请求转发给FastCGI进程。
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
if条件:可以在location块内使用if语句来根据请求的条件进行不同的处理。但要小心使用if,因为它可能会引入一些问题。
location /admin/ {
if ($remote_addr != 192.168.1.1) {
return 403;
}
# 其他配置指令
}
静态网站配置
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(jpg|jpeg|png|css|js)$ {
expires 7d; # 静态资源缓存 7 天,告知浏览器缓存静态资源的时间,单位:d(天)、 h(小时)、m(分钟)、s(秒)。
add_header Cache-Control "public, no-transform"; #添加请求头 防止 CDN 修改内容
access_log off; # 不记录静态资源日志
gzip on; # 启用 Gzip 压缩,减少传输数据量(尤其对文本资源效果显著)。需确保客户端支持(现代浏览器均支持)。
gzip_types text/css application/javascript image/svg+xml; # 压缩的文件类型(如 CSS、JS、SVG)。避免压缩已压缩的资源(如 .jpg、.mp4)。
gzip_min_length 1k; # 仅压缩大于 1KB 的文件(小文件压缩收益低)。
gzip_comp_level 6; # 压缩级别(1-9),6 是平衡速度和压缩率的推荐值。
}
}
访问http://example.com/css/style.css → 实际文件路径为 /var/www/example.com/css/style.css。
禁止访问敏感文件:
location ~ /\. {
deny all; # 禁止访问所有以 . 开头的隐藏文件(如 .git、.env) 直接返回 403 Forbidden。
access_log off;
log_not_found off; # 不记录 404 错误(避免日志污染)
}
正则匹配所有以 . 开头的路径(如 http://example.com/.git/config)。
处理文件请求:
# 主路径处理(支持 SPA)
location / {
try_files $uri $uri/ /index.html =404;
}
按顺序检查文件是否存在,若均不存在则返回最后一个参数(如 404 或重定向)。
$uri:检查请求的原始路径(如/about)。$uri/:检查路径是否为目录(如/about/)。/index.html:若前两者均不存在,返回index.html(适用于单页应用 SPA)。=404:若index.html也不存在,返回 404 错误。
反向代理配置
反向代理作用:接收客户端请求,将请求转发到后端服务器,并将响应返回给客户端。
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000; # 转发到本地 3000 端口
proxy_set_header Host $host; # 传递原始 Host 头 后端服务器可能需要根据 Host 头区分虚拟主机。
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP (否则后端只能看到 Nginx 的 IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链 IP(格式:client, proxy1, proxy2)。
proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https) 告知后端请求是通过 http 还是 https 发起(影响重定向逻辑)。
#控制后端响应的重定向
proxy_redirect http://backend_server/ https://$host/; # 修改后端响应的重定向,当后端返回 301/302 重定向时,修改重定向的 Location 头,确保客户端访问的是前端域名而非后端内部地址。
#控制响应缓冲
proxy_pass http://backend_server;
proxy_buffering on; # 启用缓冲(默认)Nginx 会先缓冲后端响应,再逐步发送给客户端(减少客户端等待时间,平滑网络波动)。off 关闭缓冲直接转发后端响应(适用于实时性要求高的场景,如 WebSocket)。
proxy_buffer_size 4k; # 首部缓冲区大小 (通常 4K 足够)
proxy_buffers 8 16k; # 响应体缓冲区数量和大小 (数量 × 大小,如 8 16k 表示 8 个 16K 缓冲区)
proxy_busy_buffers_size 32k; # 高负载时使用的额外缓冲区 当客户端读取速度慢时,允许使用的额外缓冲区大小。
#超时控制
proxy_connect_timeout 60s; # 连接后端超时时间 后端无响应则返回 504 Gateway Timeout
proxy_read_timeout 300s; # 读取后端响应超时时间(适用于耗时操作,大数据查询)
proxy_send_timeout 300s; # 发送请求到后端超时时间 (通常用于上传大文件)
#指定http版本
proxy_http_version 1.1; # 强制使用 HTTP/1.1(支持长连接) 默认情况下,Nginx 与后端使用 HTTP/1.0 协议(短连接)。设置为 1.1 后,可启用长连接(Keep-Alive),减少重复握手开销。
proxy_set_header Connection ""; # 清除 Connection 头(避免冲突)
}
}
协议支持:支持 http、https、unix:/path/to/socket.sock(Unix 域套接字)
proxy_redirect使用场景:后端返回 Location: http://backend_server/login,经过 proxy_redirect 后变为 https://example.com/login。默认行为:若不配置,客户端可能直接访问后端内部地址,导致失败。
负载均衡配置
将请求分发到多个后端服务器,提高可用性和吞吐量。
upstream backend_pool {
server 10.0.0.1:8000 weight=2; # 权重 2
server 10.0.0.2:8000; # 权重 1(默认)
server 10.0.0.3:8000 backup; # 备用服务器
}
server {
location /api/ {
proxy_pass http://backend_pool;
}
}
- 调度策略:
轮询(默认):按顺序分配请求。weight:根据权重分配(权重越高,请求越多)。ip_hash:固定客户端 IP 到同一后端(解决会话保持问题)。least_conn:优先分配给连接数最少的后端。backup:仅当其他后端不可用时使用。
WebSocket 代理
location /ws/ {
proxy_pass http://backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # 传递 Upgrade 头
proxy_set_header Connection "upgrade"; # 强制升级为 WebSocket
proxy_set_header X-Real-IP $remote_addr;
}
SSL 终止(HTTPS 前端,HTTP 后端)
SSL 终止:指在 反向代理服务器(如 Nginx、HAProxy、Apache 等) 上 提前终止 HTTPS 加密连接,将客户端的 HTTPS 请求解密为明文 HTTP 请求后,再转发给后端服务器
流程:
- 客户端发起 HTTPS 请求
- 反向代理服务器(如 Nginx) 收到请求后,使用配置的 SSL 证书和私钥 解密 HTTPS 请求得到明文 HTTP 请求。
- 代理服务器将明文 HTTP 请求 转发给后端服务器
- 后端服务器处理请求 并返回 HTTP 响应。
- 代理服务器将响应加密为 HTTPS,再发回给客户端。
应用场景:
减轻后端服务器负载:SSL 加密/解密(如 RSA、ECDHE 密钥交换)会消耗大量 CPU 资源。
统一证书管理:如果后端有多个服务(如 api.example.com、dashboard.example.com),每个服务独立配置证书会非常复杂。证书仅需配置在代理服务器上,后端服务无需知道证书的存在。证书更新时只需修改代理服务器配置,无需重启后端服务。
server {
listen 443 ssl; # 前端监听 HTTPS 端口
server_name api.example.com; # 域名
# SSL 证书配置
ssl_certificate /path/to/cert.pem; # 公钥证书(如 Let's Encrypt 证书)
ssl_certificate_key /path/to/key.pem; # 私钥
ssl_protocols TLSv1.2 TLSv1.3; # 启用安全协议
ssl_ciphers HIGH:!aNULL:!MD5; # 配置强加密套件
# 反向代理配置(HTTPS 转 HTTP)
location / {
proxy_pass http://backend_server; # 后端使用 HTTP(如 http://127.0.0.1:8080)
proxy_set_header Host $host; # 传递原始 Host 头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理链 IP
proxy_set_header X-Forwarded-Proto https; # 告知后端协议是 HTTPS
}
}
# 可选:强制 HTTP 跳转到 HTTPS
server {
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
强制 HTTPS 重定向,
- 301 是永久重定向,利于 SEO 和浏览器缓存。
$host和$request_uri保留原请求的域名和路径(如http://example.com/blog→https://example.com/blog)。
Nginx常见配置说明(1)
worker_processes 8;#nginx进程数,建议设置为等于CPU总核心数
worker_connections 65535;#单个进程最大连接数(最大连接数=连接数*进程数)
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
upstream blog.ha97.com {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
#虚拟主机的配置
server
{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.ha97.com ha97.com;
index index.html index.htm index.php;
root /data/www/ha97;
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#配置静态资源
location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$
{
expires 30d;
root /nginx-1.4.7;#root:
break;
}
负载均衡策略:http://baidutech.blog.51cto.com/4114344/1033718/
虚拟主机配置实例
安装完nginx,修改nginx-1.5.1\conf下面的nginx.conf,之后进行启动或重启,来使用配置文件。
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
#利用nginx配置虚拟主机,每个server代表一个虚拟主机,可以以端口号区分,也可以以域名区分,下面是以域名区分
#后台manage
server {
listen 80; #该虚拟主机监听的端口号
server_name manage.taotao.com; #访问该域名会访问到该虚拟主机,host文件的配置是为了防止dns域名解析,而是直接访问到host配置的地址
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarddd_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8081; #tomcat的地址,nginx作为反向代理,访问上面域名,会将请求转发到该地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#后台manage
server {
listen 80;
server_name manage.qiuxue.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8081; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#首页taotao
server {
listen 80;
server_name www.taotao.com taotao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
location / {
proxy_pass http://127.0.0.1:8082; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#首页qiuxue
server {
listen 80;
server_name www.qiuxue.com qiuxue.com ;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
location / {
proxy_pass http://127.0.0.1:8083; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#订单order
server {
listen 80;
server_name order.taotao.com order.qiuxue.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; # 设置代理头信息,转发请求时,将信息一起转发
location / {
proxy_pass http://127.0.0.1:8084; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#索引solr
server {
listen 80;
server_name sso.taotao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; # 设置代理头信息,转发请求时,将信息一起转发
location / {
proxy_pass http://127.0.0.1:8083; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#索引solr
server {
listen 80;
server_name solr.taotao.com solr.qiuxue.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; # 设置代理头信息,转发请求时,将信息一起转发
location / {
proxy_pass http://127.0.0.1:8983; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#搜索search
server {
listen 80;
server_name search.taotao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; # 设置代理头信息,转发请求时,将信息一起转发
location / {
proxy_pass http://127.0.0.1:8085; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#购物车cart
server {
listen 80;
server_name cart.taotao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; # 设置代理头信息,转发请求时,将信息一起转发
location / {
proxy_pass http://127.0.0.1:8086; #tomcat的地址
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
#图片image
server {
listen 80;
server_name image.taotao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root F:\\javaUse\\taotao-upload;
}
}
#图片image
server {
listen 80;
server_name image.qiuxue.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root F:\\javaUse\\qiuxue-upload;
}
}
#静态static
server {
listen 80;
server_name static.taotao.com;#本地配的话static.taotao.com配置到host中
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root F:\\javaUse\\taotao-static;
}
}
#静态static
server {
listen 80;
server_name static.qiuxue.com;
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root F:\\javaUse\\qiuxue-static;
}
}
}

浙公网安备 33010602011771号