Nginx 实战

130 阅读2分钟

日新计划6月更文 Day 22

  本文是 Nginx 的实战篇,给出了一些 Nginx 的实践范例,请学习 Nginx 基础知识后阅读。

反向代理

  Nginx 可以进行七层反向代理或四层反向代理。“七层反向代理”指 Nginx 解析并处理 HTTP 请求报文,修改请求主机与 URL,如将所有请求 URL 中含有/api/的请求反代给http://127.0.0.1:9001处理:

server {
    listen 80;
    location /api/ {
        proxy_pass http://127.0.0.1:9001;
    }
}

  四层反向代理指 Nginx 直接转发 TCP 数据段,如将发往本机2022端口的数据段交由192.168.0.2:3306处理:

stream{
    server {
        listen 2022;
        proxy_pass 192.168.0.2:3306;
    }
}
  1. 四层反向代理需要编译时附带--with-stream参数。
  2. stream部分应该与http模块并列

虚拟主机

  “虚拟主机”指一台主机充当多台主机的入口,如不同域名解析到同一主机时,使用如下配置将访问a.foo.com:80的流量交由http://127.0.0.1:8001处理;将访问b.foo.com的流量交由 Nginx 的静态资源服务处理:

server{
    listen 80;
    server_name a.foo.com;
    
    location / {
        proxy_pass http://127.0.0.1:8001
    }
}

server{
    listen 80;
    server_name b.foo.com;
    
    location / {
        root /srv/www/html;
        index index.html index.htm;
    }
}

  当然也可以使用server_name对使用不同 IP 的请求进行分流。

HTTPS

  如今许多网站从 HTTP 更换为更安全的 HTTPS,一种方案是由 Nginx 代理 HTTPS 通信,再将动态请求交由内网或本机其他程序处理:

server {
    listen 443 ssl;
    server blog.foo.com;
    ssl_certificate cert/blog.foo.com_bundle.crt;  #证书文件。
    ssl_certificate_key cert/blog.foo.com.key; #证书密钥文件称。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #表示使用的加密套件的类型。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
    ssl_prefer_server_ciphers on;
    
    location / {
        proxy_pass http://127.0.0.1:10086;
    }
}
server {
    listen 80;
    server blog.foo.com;
    rewrite ^(.*)$ https://$host$1 permanent; #将所有HTTP请求通过rewrite指令重定向到HTTPS
    
    location / {
        proxy_pass http://127.0.0.1:10086;
    }
}
  1. 最普通的情况,只需配置ssl_certificatessl_certificate_key即可。

配置

  在 Nginx 的配置文件中有许多配置参数,如全局参数:

  • userUsername [Group],运行 Nginx 的 worker 子进程的用户和组
  • worker_processesNumber | auto,运行 worker 子进程的数量
  • pid:DIR,存储 PID 文件的位置

   HTTP 部分的配置参数:

  • listem:表示监听的端口,可限制监听范围
  • server_name:对请求的服务器名进行筛选,可使用全名、左通配符、右通配符、正则表达式匹配,优先级依次降低。