日新计划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;
}
}
- 四层反向代理需要编译时附带
--with-stream参数。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;
}
}
- 最普通的情况,只需配置
ssl_certificate和ssl_certificate_key即可。
配置
在 Nginx 的配置文件中有许多配置参数,如全局参数:
user:Username [Group],运行 Nginx 的 worker 子进程的用户和组worker_processes:Number | auto,运行 worker 子进程的数量pid:DIR,存储 PID 文件的位置
HTTP 部分的配置参数:
listem:表示监听的端口,可限制监听范围server_name:对请求的服务器名进行筛选,可使用全名、左通配符、右通配符、正则表达式匹配,优先级依次降低。