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=[^ ]+'

 

在/usr/local/nginx/conf目录下nginx.conf文件是nginx的配置文件。

注释

在 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 或重定向)。

  1. $uri:检查请求的原始路径(如 /about)。
  2. $uri/:检查路径是否为目录(如 /about/)。
  3. /index.html:若前两者均不存在,返回 index.html(适用于单页应用 SPA)。
  4. =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 请求后,再转发给后端服务器

流程:

  1. 客户端发起 HTTPS 请求
  2. 反向代理服务器(如 Nginx) 收到请求后,使用配置的 SSL 证书和私钥 解密 HTTPS 请求得到明文 HTTP 请求。
  3. 代理服务器将明文 HTTP 请求 转发给后端服务器
  4. 后端服务器处理请求 并返回 HTTP 响应。
  5. 代理服务器将响应加密为 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;
        }
        
    }


}

 

posted @ 2026-01-15 12:00  星光闪闪  阅读(21)  评论(0)    收藏  举报