ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

  • 虚拟化服务

  • 数据库服务

  • 监控服务

  • Web服务

    • Nginx笔记

      • HTTP/HTTPS介绍
      • Nginx介绍与部署
      • Nginx配置与常用模块
        • Nginx配置文件介绍
          • 主配置文件
          • 拓展配置文件
          • 虚拟主机匹配顺序
          • root和alias匹配路径的区别
        • Nginx命令
          • nginx [参数]
        • 虚拟主机访问方式
          • 域名访问
          • IP地址访问
          • 端口访问
          • 网站访问过程
        • 常见模块功能
          • IP地址进行访问控制
          • 用户认证进行访问控制
          • 资源索引页面
          • 解决页面中文乱码
          • 监控网站访问状态
          • 记录错误日志
          • 记录访问日志
          • location区域匹配
          • 指定错误页面
          • 网站跳转重定向
          • 配置HTTPS
          • 解决上传文件过大报错
      • Nginx负载均衡
      • Nginx优化
    • Tomcat笔记

  • 数据处理

  • Ops
  • Web服务
  • Nginx笔记
Hoshinozora
2023-03-30
目录

Nginx配置与常用模块

# Nginx配置文件介绍

Nginx中一般会将主配置和虚拟主机、负载均衡等配置分开来编写,然后再在主配置文件中导入拓展配置文件,方便进行统一管理。

# 主配置文件

  • 配置文件路径:./nginx/conf/nginx.conf

  • 主配置文件常用配置

# 指定Nginx进程的管理用户
user  nginx;

# 指定Worker进程数量
# 进程越多并发能力越强,一般设为CPU核数的1~2倍
worker_processes 1;

# 启用CPU亲和
worker_cpu_affinity auto;

# 关闭守护进程模式
daemon off;

# 指定错误日志文件路径
logs/error.log;

# 指定Pid文件路径
pid /var/run/nginx.pid;

# Event事件配置区域
events {
    # 定义一个Worker进程可以同时接收多少个访问请求
    worker_connections 10240;
}

# HTTP配置区域
http {

    # 关闭响应头中的server显示的nginx版本号信息,提高安全性
    server_tokens off;

    # 导入支持的文件类型配置文件
    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 65;

    # 导入拓展配置文件
    include conf.d/*.conf;

}
1
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

# 拓展配置文件

  • 拓展配置文件一般会用来定义负载均衡、虚拟主机等配置。

  • 一般会将拓展的配置文件放到一个目录进行统一管理,例如:./nginx/conf/conf.d/*.conf

  • 虚拟主机常用配置

    server {
        listen  80;
        server_name localhost;
    
        location / {
            root /data/apps/nginx/html;
            index index.html index.htm;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    • server{} - 虚拟主机配置区域

      • 配置一个虚拟主机同等于配置一个网站,例如www、bbs、blog等。
    • listen 80; - 虚拟主机监听的端口

    • server_name localhost; - 虚拟主机名称

      • 虚拟主机名就是虚拟主机会匹配的域名。
      • 虚拟主机名可以配置多个别名,例如:server_name baidu.com www.baidu.com。
      • 当多个虚拟主机的虚拟主机名冲突时,则按照配置文件导入顺序,使用匹配到的第一个同名虚拟主机。
    • location [资源匹配路径] {} - 资源匹配区域

      • 客户端访问时,如果访问的是设定的资源匹配路径,就会去设定的资源目录下寻找资源。

      • 匹配路径为/代表默认匹配的区域。

      • 例如:

        server_name www.test.com;
        
        # 匹配区域/test
        location /test {
            ...
        }
        # 匹配区域/
        location / {
            ...
        }
        
        # 用户访问www.test.com/test时,会进到匹配区域/test中,访问其他则会进到匹配区域/中。
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
    • root /data/apps/nginx/html; - 指定资源目录根路径

      • root方式会使用资源目录路径加上匹配路径,去查找指定资源。

      • 例如:

        server_name www.test.com;
        location /test/img {
            root /data/apps/nginx/html;
            index index.html index.htm;
        }
        
        # 用户访问www.test.com/test/img/avatar/1.jpg时,会去/data/apps/nginx/html/test/img/目录下查找./avatar/1.jpg资源
        
        1
        2
        3
        4
        5
        6
        7
    • index index.html index.htm; - 指定首页文件

      • 在用户没有请求具体资源时,默认响应的首页文件。

      • 例如:

        server_name www.test.com;
        location /test {
            root /data/apps/nginx/html;
            index index.html index.htm;
        }
        
        # 用户访问www.test.com/test时,会响应/data/apps/nginx/html/index.html的内容给用户。
        
        1
        2
        3
        4
        5
        6
        7

# 虚拟主机匹配顺序

  1. 匹配字符串完全匹配的主机名 (完全匹配),例如:server_name www.baidu.com;。

  2. 匹配通配符在前面的主机名,例如:server_name *.baidu.com;。

  3. 匹配通配符在后面的主机名,例如:server_name www.baidu.*;。

  4. 匹配使用正则表达式的主机名。

  5. 匹配listen配置项加有"default_server"的主机,例如:listen 80 default_server;。

    • 可以实现Nginx禁止通过IP或未知域名访问

      # 当用户通过IP或未知域名访问时,由于没有匹配到对应的主机名,默认就会按配置文件顺序匹配
      # 但我们在虚拟主机上配置"listen 80 default_server;"之后,就可以让该主机更优先于顺序载入进行匹配,可以在该虚拟主机上配置返回错误或者进行跳转来导流。
      
      server {
          # 让Nginx在其他主机都没有匹配成功时使用该主机
          listen 80 default_server;
      
          # 匹配空域名或者直接不写该条
          server_name _;
      
          return 302 https://官网;
          # return 503;
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
  6. 匹配按顺序配置文件载入的第一个主机。

# root和alias匹配路径的区别

  • 在location / {}中配置的root和alias的区别。

  • root方式的资源查找路径是:root路径 + location路径。

    • 表示从指定的root目录路径下开始查找,拼接上匹配的资源路径,来查找资源。

      # 比如下面的例子,如果用户请求的URI是/img/test.jpg,则会去/data/resource/img/下查找test.jpg
      location /img/ {
          root /data/resource/;
      }
      
      1
      2
      3
      4
  • alias的资源查找路径是:使用alias路径替换location路径。

    • 表示如果匹配上,则固定使用alias配置的资源。

      # 比如下面的例子,如果用户请求的URI是/img/test.jpg,则会去/data/resource/下查找test.jpg
      location /img/ {
          alias /data/resource/;
      }
      
      1
      2
      3
      4

# Nginx命令

# nginx [参数]

  • -t - 测试配置文件是否正确
  • -T - 测试配置文件是否正确,不正确则显示配置文件内容
  • -s [指令] - 发送控制指令给Master进程
    • reload - 平滑重启并加载配置
      • 新建立的连接会使用新配置,不会断开当前已有的连接
    • quit - 优雅退出
    • stop - 快速退出
  • 例如:nginx -s reload

# 虚拟主机访问方式

# 域名访问

  • 客户端使用域名访问时,会先将域名解析为IP然后进行转换,访问时请求头会将请求的域名放到Host字段。
  • 然后Nginx收到后就可以根据Host字段中的域名,去匹配对应的虚拟主机了。

# IP地址访问

  • 客户端使用IP访问时,则会使用匹配到的第一个虚拟主机,匹配顺序是根据导入顺序的。

  • 如果想要某些配置文件优先导入,可以通过编辑主配置文件,在导入拓展配置文件前,额外导入一个优先匹配的配置文件来调整顺序。

  • 另外虚拟主机配置还可以指定监听的网卡地址,使客户端只能使用监听的地址访问,不过需要所有的站点配置文件的监听地址配置一样才有效,还有就是Nginx中涉及到IP地址的配置都需要重启服务才能生效。

  • 例如:server { listen 10.0.0.7:80; ... }

# 端口访问

  • 客户端只能使用监听的端口访问某虚拟主机,配置好后平滑重启即可。

  • 另外如果多个虚拟主机端口配置相同,则访问该端口时会按照域名或者导入顺序进行匹配。

  • 例如:server { listen 8080; ... }

# 网站访问过程

  1. 将域名进行解析,得到对应的网站服务器IP地址。
  2. 建立传输层TCP的连接,浏览器访问端口默认是80。
  3. 根据应用层HTTP协议发出请求报文到网站服务器。
  4. 服务端根据请求端口和请求报文中的Host信息查找指定虚拟主机,如果没有和域名一致的虚拟主机名,则会按导入顺序找到满足端口要求的第一个虚拟主机交由其处理,并返回响应报文。
  5. 客户端收到响应报文后,渲染网站页面。

# 常见模块功能

Nginx中的大部分功能实际上是由各种模块来实现的,我们平时编写Nginx配置,实际上就是在定义各种模块。

# IP地址进行访问控制

  • ngx_http_access_module模块

    # 配置格式
    Syntax: deny address | CIDR | unix: | all;
    Default: —
    # 能使用的区域
    Context: http, server, location, limit_except
    
    
    1
    2
    3
    4
    5
    6
  • 使用例子

    # 拒绝10.0.0.0/24网段访问,允许127.16.1.0/24网段访问
    # 一般只会配置在server,location这两个区域中,区域不同,作用域就不同
    server {
        ... ...
        location /test {
            root /html/www;
            deny 10.0.0.0/24;
            allow 127.16.1.0/24;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  • 其他说明

    • 仅配置ALLOW而没有配置DENY时,配置是无效的,仅允许并不会拒绝其他网段。

    • 访问控制是顺序匹配,和Iptables一样先匹配上哪个规则,就使用哪个规则的动作(allow/deny)。所以如果要拒绝除了某个网段外的其他IP,那么可以将ALLOW允许的网段定义DENY ALL上面,例如:

      allow 192.168.10.0/24;
      deny all;
      
      1
      2

# 用户认证进行访问控制

  • ngx_http_auth_basic_module模块

    # 认证是否开启,指定"提示信息"进行开启,或者指定off进行关闭
    Syntax:	auth_basic string | off;
    # 指定用户密码文件路径
    Syntax:	auth_basic_user_file file;
    Default:	auth_basic off;
    Context:	http, server, location, limit_except
    
    1
    2
    3
    4
    5
    6
  • 使用例子

    server{
        location / {
          ... ...
          auth_basic "Welcome to My Site";
          auth_basic_user_file ./user_auth.txt;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
  • 创建密码文件

    • 密码文件配置可以指定相对路径或者绝对路径,不过最好使用相对路径,相对路径是相对于./nginx/conf/目录。

      # 安装htpasswd命令,用于生成密文密码文件
      yum install -y httpd-tools
      
      # 生成密码文件
      htpasswd -bc ./user_auth.txt myuser qwe123456
      
      # 修改文件权限和属主,提高密码文件安全性
      chown nginx.nignx ./user_auth.txt && chmod 600 ./user_auth.txt
      
      1
      2
      3
      4
      5
      6
      7
      8
    • htpasswd命令

      • htpasswd -bc [文件路径] [用户名] [密码]
      • 参数:
      • -c - 创建一个密码文件
      • -b - 免交互方式生成密码文件
      • -m - 指定使用md5进行加密(默认)
      • -B - 指定使用bcrypt进行加密
      • -d - 删除指定用户

# 资源索引页面

  • ngx_http_autoindex_module模块

    # 是否开启nginx站点目录索引功能
    Syntax: autoindex on | off;
    Default: autoindex off;
    Context: http, server, location
    
    1
    2
    3
    4
  • 使用例子

    # 需要让location找不到首页文件, 可以删除index.html文件, 或指定一个不存在的文件
    location / {
        index;
        autoindex on;
    }
    
    1
    2
    3
    4
    5
  • 可识别资源文件类型配置

    • 将资源类型加入到mime.conf配置文件即可。
    • 用于让nginx可以识别资源文件类型,若访问资源的扩展名存在于mime.conf文件中,则访问时直接可以看到该文件的内容。若访问资源的扩展名不存在于mime.conf文件中,则访问时会直接下载该文件资源。

# 解决页面中文乱码

  • ngx_http_charset_module模块

    # 指定页面编码类型
    Syntax: charset charset | off;
    Default: charset off;
    Context: http, server, location, if in location
    
    1
    2
    3
    4
  • 使用例子

    location / {
        charset utf-8;
        ... ...
    }
    
    1
    2
    3
    4

# 监控网站访问状态

  • ngx_http_stub_status_module模块,需要在编译时启用该模块:--with-http_stub_status_module。

    # 启用状态访问页面
    Syntax:	stub_status;
    Default: —
    Context: server, location
    
    1
    2
    3
    4
  • 使用例子

    # 虚拟主机方式
    server {
        listen 80;
        server_name status.test.com;
        stub_status;
    }
    
    # 资源页面方式
    location = /basic_status {
        stub_status;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  • 页面参数信息

    • 我们可以使用curl获取页面数据,然后配合awk取出其中的值。
    • Active connections - 活跃的连接数信息,当前已连接到网站的客户端数。
    • accepts - 接收的连接数的总和,重启服务将会重置。
    • handled - 处理的连接数的总和。
      • 当接收连接数大于处理连接数时,就代表请求并发量太大,worker处理不过来。
    • requests - 所以连接的HTTP请求次数的总和,一个长连接可以对应多个请求。
    • Reading - 正在读取的请求报文数量。
    • Writing - 正在发送的响应报文数量。
    • Waiting - 暂未处理的请求数量。

# 记录错误日志

  • error_log模块

    # 指定错误日志路径以及错误日志记录级别
    Syntax:	error_log file [level];
    Default: error_log logs/error.log error;
    Context: main, http, mail, stream, server, location
    
    1
    2
    3
    4
  • 使用例子

    # 主配置文件默认有配置
    http {
        error_log logs/error.log error;
        ... ...
    }
    
    1
    2
    3
    4
    5
  • 错误级别

    • 级别越低,显示的信息越多,反之级别越高,显示的信息也就越少,一般使用error级别即可。
    • debug - 调试级别,服务运行的状态信息和错误信息详细显示。
    • info - 信息级别,只显示重要的运行信息和错误信息。
    • notice - 通知级别,更加重要的信息进行通知说明。
    • warn - 警告级别,可能出现了一些错误,但不影响服务运行。
    • error - 错误级别,服务运行出现了错误,需要进行纠正,如果不管则可能会发生更严重的错误。
    • crit - 严重级别,严重的错误,必须进行错误修改。
    • alert - 严重警告级别,又严重又有警告,必须进行错误修改。
    • emerg - 灾难级别,服务已经不能正常运行。

# 记录访问日志

  • access_log模块

    # 定义日志路径和调用日志格式
    Syntax:	access_log path [format];
    Context: http, server, location, if in location, limit_except
    
    1
    2
    3
  • 使用例子

    # 默认在主配置文件中配置了记录HTTP的所有访问日志,但一般会关掉,然后在各个server中分别进行配置
    # 另外一般还会配置日志切割,可以通过定时任务加脚本、或者logrotate服务进行定时切割
    server {
        listen 80;
        server_name www.test.com;
        access_log logs/www_access.log main;
        ... ...
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 日志格式

    # 定义日志格式,一般在主配置文件的HTTP块中配置,这样之后导入的拓展配置文件都可以调用
    
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    1
    2
    3
    4
    5
    • $remote_addr - 访问源IP地址
    • $remote_user - 访问认证的用户名
    • $time_local - 访问网站的时间
    • $request - 请求报文的请求行信息
    • $status - 网站响应的状态码信息
    • $body_bytes_sent - 网站响应的数据资源的大小信息(Bytes),可用于统计站点耗费的流量
    • $http_referer - 用于记录访问或调用网站资源的来源地址,可用于防止盗链
      • 盗链就是其他人直接将链接盗走,上线到他自己的网站上,这样耗费的流量还是源链接的流量。
    • $http_user_agent - 记录用户访问页面使用的用户代理程序,也就是浏览器信息
    • $http_x_forwarded_for - 用于记录负载均衡服务发送来的用户源IP

# location区域匹配

  • ngx_http_core_module模块

    # location属于core模块,它的作用是匹配客户端访问的URI并进行对应处理
    Syntax:	location [ = | ~ | ~* | ^~ ] uri { ... }
    location @name { ... }
    Context: server, location
    
    1
    2
    3
    4
  • 使用例子

    # 精准匹配
    location = / {...}
    # 默认匹配
    location / {...}
    # 按照目录进行匹配
    location /documents/ {...}
    # 使优先匹配
    location ^~ /images/ {...}
    # 不区分大小写进正则匹配
    location ~* \.(gif|jpg|jpeg)$ {...}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  • 匹配方式

    • = [匹配内容]
      • 精确匹配,优先级最高,URI正好是[匹配内容]则匹配。
    • ^~ /[匹配区域]/
      • 优先匹配,优先级第二,同时不识别URI信息中的符号信息。
    • ~ [匹配内容]
      • 区分大小写匹配,优先级第三,可用正则表达式。
    • ~* [匹配内容]
    • 不区分大小写进行匹配,优先级第三,可用正则表达式。
    • \用于转义.符号,此处表示匹配所有.(gif|jpg|jpeg)结尾的URL。
    • /[匹配区域]/
      • 按目录进行匹配,优先级第三,URI是域名/匹配内容/...则匹配。
    • /
      • 默认匹配,优先级最低,如果URI和其他location都不匹配,则使用该默认匹配。
      • 如果同时配置/和= /,则会以= /为准。

# 指定错误页面

  • ngx_http_core_module模块

    # error_page属于core模块,它的作用是自定义错误页面
    Syntax:	error_page code ... [=[response]] uri;
    Default: —
    Context: http, server, location, if in location
    
    1
    2
    3
    4
  • 使用例子

    localtion /onepage {
        root /html/www;
        error_page 404 /test.jpg;
        error_page 500 502 503 504 /50x.html;
    }
    # 在/html/www/中存放test.jpg和50x.html文件
    # 用户请求/onepage/...出现404时就会展示/test.jpg
    # 用户请求/onepage/...出现500 502 503 504时就会展示/50x.html
    
    1
    2
    3
    4
    5
    6
    7
    8

# 网站跳转重定向

  • ngx_http_rewrite_module模块

    # 重定向规则配置,可重定向浏览器访问的URL或URI到指定网站
    Syntax:	rewrite regex replacement [flag];
    Context: server, location, if
    
    1
    2
    3
    • 跳转方式
      • permanent - 301 永久跳转
        • 第一次跳转后,让浏览器保存跳转信息,以后由浏览器本地跳转。
        • 如果跳转地址换了,则需要浏览器清除缓存,才能访问新地址。
      • redirect - 302 临时跳转
        • 每一次跳转都会访问服务端,会增加服务器工作量。
  • 使用例子

    # 重定向test.com的请求到www.test.com虚拟主机
    server {
        listen 80;
        server_name test.com;
        rewrite ^/(.*) http://www.test.com/$1 permanent;
    }
    
    # 重定向HTTP请求到HTTPS
    server {
        # 监听HTTP的80端口
        listen 80;
        server_name www.test.com;
        rewrite ^/(.*) https://${server_name}$1 permanent;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  • 打破无限跳转方法

    • 如果想要在同一虚拟主机中,将多别名跳转成一个别名,就可能出现无限跳转的问题。

    • 比如:将www.test02.com重定向到www.test01.com

    • 第一种方法:利用不同的server区进行跳转。

      # 方法一:
      server {
          listen 80;
          server_name www.test02.com;
          rewrite ^/(.*) http://www.test01.com/$1 permanent;
      }
          
      server {
          listen 80;
          server_name www.test01.com;
          root /html/www;
          index index.html;
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
    • 第二种方法:同一虚拟主机,设置多别名,然后利用IF判断。

      # 方法二
      server {
          listen 80;
          server_name www.test01.com www.test02.com;
      
          if ($http_host != "www.test01.com") {
              rewrite ^/(.*) http://www.test01.com/$1 permanent;
          }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
  • return方式实现跳转

    • return可以返回指定状态码,也可以用来做重定向跳转。

      local / { return [状态码] }
      
      1
    • 使用例子

      # 返回404状态码
      local / {
          return [状态码]
      }
      
      # 返回302状态码并URL跳转到指定链接
      # 比如下面的例子:请求www.test02.com/xxx就会302跳转到www.test01.com/xxx
      local / {
          return 302 http://www.test01.com$request_uri;
      }
      
      # 返回302状态码并URI跳转到指定资源
      # # 比如下面的例子:请求www.test01.com/test就会302跳转到www.test01.com/img/test.jpg
      local /test {
          return 302 "/img/test.jpg";
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16

# 配置HTTPS

  • ngx_http_ssl_module模块,需要在编译时启用该模块:--with-http_ssl_module。

    # 启动ssl功能,或者直接监听时指定:listen 443 ssl;
    Syntax: ssl on | off;
    Default: ssl off;
    Context: http, server
    
    # 指定证书文件
    Syntax: ssl_certificate file;
    Default: -
    Context: http, server
    
    # 指定私钥文件
    Syntax: ssl_certificate_key file;
    Default: -
    Context: http, server
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  • 单机配置

    # 创建存放SSL证书的路径
    mkdir -p /data/apps/nginx/cert/
    
    # 将从CA机构申请的证书放到证书目录下,例如:
    mv ./www.test.com.crt /data/apps/nginx/cert/
    mv ./www.test.com.key /data/apps/nginx/cert/
    
    # 虚拟主机中配置HTTPS
    server {
        # 监听HTTPS的443端口并启用SSL
        listen    443 ssl;
        server_name www.test.com;
        root /html/www
    
        # 指定公钥文件路径
        ssl_certificate cert/www.test.com.crt;
    
        # 指定私钥文件路径
        ssl_certificate_key cert/www.test.com.key;
    
        location / {
            index index.html;
        }
    }
    
    # 如果我们需要强制使用HTTPS,则可以配置监听HTTP的80端口,然后将其重定向到HTTPS的443端口去
    server {
        listen 80;
        server_name www.test.com;
        rewrite ^/(.*) https://${server_name}$1 permanent;
    }
    
    1
    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
  • 负载均衡多机配置

    • 一般来说后端服务器不需要开启监听443端口和开启SSL,只需要监听80端口即可。客户端与服务端的SSL认证由负载均衡服务器完成就行,这样一方面可以减少配置复杂度、也可以提高数据传输效率。
    • 大体思路:用户以HTTPS访问负载均衡服务器,负载均衡服务器以HTTP代理访问后端WEB服务器,后端WEB服务器以HTTP返回给负载均衡服务器,负载均衡服务器再以HTTPS加密返回给用户。
    # 负载均衡服务器上,创建存放SSL证书的路径
    mkdir -p /data/apps/nginx/cert/
    
    # 负载均衡服务器上,将从CA机构申请的证书放到证书目录下,例如:
    mv ./www.test.com.crt /data/apps/nginx/cert/
    mv ./www.test.com.key /data/apps/nginx/cert/
    
    # 负载均衡服务器上配置站点文件
    upstream web {
        server 10.0.0.7:80;
        server 10.0.0.8:80;
    }
    server {
        # 负载均衡服务器以HTTPS处理用户请求
        listen 443 ssl;
        server_name www.test.com;
    
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
    
        # 负载均衡服务器以HTTP请求后端WEB服务器
        location / {
            proxy_pass http://web;
            proxy_set_head Host $http_host; 
        }
    }
    
    # 负载均衡服务器监听HTTP跳转到HTTPS
    server {
        listen 80;
        server_name www.test.com;
        rewrite ^/(.*) https://${server_name}$1 permanent;
    }
    
    1
    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
  • HTTPS负载均衡PHP页面乱码、无法登录问题

    • 后端WEB服务器站点配置文件添加location ~ \.php$ {...fastcgi_param HTTPS on;...}即可。

# 解决上传文件过大报错

  • Nginx站点配置添加以下参数client_max_body_size 50m;即可,控制的是Nginx上传文件最大大小。

  • 例如:

    server {
        listen 80;
        server_name www.test.com;
        client_max_body_size 50m;
        ... ...
    }
    
    1
    2
    3
    4
    5
    6
#Web#Nginx
Nginx介绍与部署
Nginx负载均衡

← Nginx介绍与部署 Nginx负载均衡→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式