Nginx 3.6配置文件详解:HTTP核心模块虚拟主机配置

点我查看Nginx 更多配置

点我查看Nginx 更多配置

点我查看Nginx 更多配置

1.配置监听端口 listen

listen [IP地址]:端口 [可选参数];

# 示例
listen 80;               # 监听所有 IPv4 地址的 80 端口
listen [::]:80;          # 监听所有 IPv6 地址的 80 端口
listen 192.168.1.100:80; # 监听特定 IP 的 80 端口
listen [2001:db8::1]:80; # 监听特定 IPv6 地址

关键可选参数作用示例
default_server设为默认虚拟主机(处理未匹配域名的请求)listen 80 default_server;
ssl启用 SSL/TLS 加密(必须用于 HTTPS)listen 443 ssl;
http2启用 HTTP/2(需与 ssl 一起使用)listen 443 ssl http2;
reuseport启用 SO_REUSEPORT(提升高并发性能)listen 80 reuseport;
backlog=N设置等待连接队列长度(默认 511)listen 80 backlog=1024;

2.配置域名 server_name

  1. 精确域名匹配(最常用)
server_name example.com www.example.com;  # 匹配这两个精确域名
  1. 通配符匹配* 只能在开头或结尾)
server_name *.example.com;    # 匹配 blog.example.com, shop.example.com 等
server_name example.*;        # 匹配 example.com, example.net 等
  1. 正则表达式匹配(以 ~ 开头)
# 正则表达式中的 `.` 需要转义为 `\.`
server_name ~^(blog|shop)\.example\.com$;   # 匹配 blog.example.com 或 shop.example.com
server_name ~^subdomain-\d+\.example\.com$; # 匹配 subdomain-123.example.com
  1. 特殊值:默认主机
server_name _;  # 匹配所有未定义域名(通常用于默认站点)
  1. 空域名匹配(处理无 Host 头的请求)
server_name "";  # 匹配缺失 Host 头的请求
  1. 多域名组合
server_name 
    example.com 
    www.example.com 
    *.app.example.com 
    ~^api-\d+\.example\.com$;

3.配置url location

location [修饰符] 匹配模式 {
    # 配置指令
}

修饰符类型

修饰符作用示例
=精确匹配(完全相等才匹配)location = /login { ... }
^~前缀匹配(匹配后不再检查正则)location ^~ /static/ { ... }
~正则匹配(区分大小写)location ~ \.php$ { ... }
~*正则匹配(不区分大小写)location~* \.(jpg|jpeg)$
无修饰符普通前缀匹配(按最长前缀优先,但会被正则覆盖)location /api/ { ... }

常见用法示例

  1. 精确匹配(登录页)
location = /login {
    proxy_pass http://auth_server;
}
  • 仅匹配 /login,不匹配 /login//login.html
  1. 静态资源前缀匹配
location ^~ /static/ {
    root /data/www;
    expires 30d;  # 缓存30天
}
  • 匹配 /static/css/style.css/static/js/app.js
  • ^~ 确保优先于后续正则规则
  1. 正则匹配(区分大小写)
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    include fastcgi_params;
}
  • 处理所有以 .php 结尾的请求(如 /index.php
  1. 正则匹配(不区分大小写)
location ~* \.(jpg|jpeg|png|gif)$ {
    root /data/images;
    access_log off;  # 不记录图片请求日志
}
  • 匹配 .JPG.PnG 等大小写混合的图片请求
  1. 通用路由(兜底规则)
location / {
    proxy_pass http://backend;
    try_files $uri $uri/ /index.html;  # 单页应用支持
}
  1. 嵌套 Location

location 支持嵌套(通常用于更细粒度的控制):

location /user {
    # 父级规则
    proxy_set_header X-User-Path $uri;

    location /user/profile {
        # 子规则:匹配 /user/profile
        proxy_pass http://profile_service;
    }
}

4.配置静态资源 root

root 用于定义请求文件的根目录路径,是配置静态资源服务的关键指令

location /路径/ {
    root /绝对路径/目录;
}

示例1:基础静态站点

server {
    listen 80;
    server_name example1.com;
	root /var/www/example2;
}
# 请求url    http://example1.com/about.html → 
# 服务器文件 /var/www/example2/about.html

示例2:子目录映射

server{
	listen 80;
	server_name example1.com;
	
	location /static/{
		root /data/web/assets;
	}
}
# 请求url    http://example.com/static/logo.png 
# 服务器文件  /data/web/assets/static/logo.png

示例3:使用 alias 替代 root(路径不拼接)

server{
	listen 80;
	server_name example1.com;
	
	location /static/{
		alias /data/web/assets;
	}
}
# 请求url    http://example.com/static/logo.png 
# 服务器文件  /data/web/assets/logo.png

5.配置默认页面 index

index 指令用于指定当客户端请求指向目录(而非具体文件)时,Nginx 尝试返回的默认文件列表

index file1 file2 ...;
  • file: 按优先级排列的文件名列表(用空格分隔)
  • Nginx 会按顺序检查列表中的文件,返回第一个找到的文件

示例1:域名/ip访问

server {
    listen 80;
    server_name example.com;
    root /var/www/html;


    index index.html index.htm index.php;
    # 访问 http://example.com 时返回 返回 index.html 
    # 如果 index.html 不存在则向后查找
    # 优先级:index.html > index.htm > index.php
}

示例2:针对特定目录的配置


server {
    listen 80;
    server_name example.com;
    root /var/www/html;

	location /blog {
	    # 仅在该目录下生效
	    index default.html;
	    # 请求 url   http://example.com/blog
	    # 返回页面    /var/www/html/default.html
	}

}

6.配置 https ssl

免费的ssl 可以通过 let’s encrypt 获取

server {
    listen 443 ssl http2;          # 启用 HTTP/2 可选
    server_name your-domain.com;
    # 访问 https://your-domain.com 

    # 证书路径
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    # 安全协议与加密套件(可以无脑复制)
    ssl_protocols TLSv1.2 TLSv1.3; # 禁用旧版 TLS
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # HSTS (强制 HTTPS)(可选)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

	
}

7.配置后端服务器

指令默认值作用示例
proxy_pass-核心指令:定义后端服务器地址
(支持 HTTP/HTTPS/unix socket)
proxy_pass http://backend:8080;
proxy_set_header-设置转发请求头
(覆盖或添加新请求头)
proxy_set_header X-Real-IP $remote_addr;
proxy_redirectdefault重写后端的重定向地址
(修正 Location 头)
proxy_redirect http://backend https://$host;
proxy_bufferingon启用响应缓冲区
(减少后端服务器压力)
proxy_buffering off; (实时流场景)
超时控制参数默认值作用推荐值
proxy_connect_timeout60s连接后端超时proxy_connect_timeout 5s;
proxy_send_timeout60s发送请求超时proxy_send_timeout 30s;
proxy_read_timeout60s读取响应超时proxy_read_timeout 120s; (长连接场景)
proxy_timeout10m代理连接最大保持时间proxy_timeout 5m;
缓冲区优化参数默认值作用计算公式
proxy_buffer_size4k/8k响应头缓冲区大小proxy_buffer_size 16k;
proxy_buffers8(4k/8k)响应体缓冲区数量与大小proxy_buffers 16 32k;
proxy_busy_buffers_size8k/16k忙碌时缓冲区大小通常为 proxy_buffers × 2
proxy_temp_file_write_size8k/16k临时文件写入块大小proxy_temp_file_write_size 64k;
容错与重试参数默认值作用示例
proxy_next_upstreamerror timeout故障转移条件
(何时切换后端服务器)
proxy_next_upstream error timeout http_502;
proxy_next_upstream_tries0 (无限制)最大重试次数proxy_next_upstream_tries 3;
proxy_next_upstream_timeout0 (无限制)重试总时间限制proxy_next_upstream_timeout 10s;
HTTPS 相关参数作用安全实践
proxy_ssl_verify是否验证后端证书proxy_ssl_verify on; (生产环境必开)
proxy_ssl_trusted_certificate信任的 CA 证书路径指向自定义 CA 包
proxy_ssl_server_name是否启用 SNIproxy_ssl_server_name on; (多域名必开)
proxy_ssl_protocols允许的 SSL/TLS 协议proxy_ssl_protocols TLSv1.2 TLSv1.3;
其他控制参数场景示例
proxy_cookie_domain修改 Set-Cookie 的 domainproxy_cookie_domain backend.com $host;
proxy_cookie_path修改 Set-Cookie 的 pathproxy_cookie_path /legacy/ /new/;
proxy_force_ranges支持断点续传proxy_force_ranges on;
proxy_http_version指定 HTTP 协议版本proxy_http_version 1.1; (WebSocket 必设)
示例1:http代理
server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或IP

    location / {
        proxy_pass http://localhost:3000;  # 后端服务地址
        
        # 关键请求头设置(直接copy)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

示例2:https 代理ssl卸载(Nginx 使用https 后端使用http)

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://你的ip或域名;                 # http 是关键
        proxy_set_header X-Forwarded-Proto https;  # 告知后端是HTTPS请求
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

示例3:https 代理 ssl不卸载


server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass https://你的ip或域名;                 # http 是关键
        proxy_ssl_verify off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

示例4:websocket代理

location /ws/ {
    proxy_pass http://你的ip或域名;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值