服务管理
sudo systemctl status nginx # nginx当前状态
sudo systemctl reload nginx # 重新加载 nginx
sudo systemctl restart nginx # 重启nginxsudo nginx -t # 检查语法
nginx # 启动
nginx -s reload # 重启
nginx -s stop # 关闭进程
nginx -s quit # 平滑关闭nginx
nginx -V # 查看nginx的安装状态,
Docker 安装
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
简单代理
location / {proxy_pass http://127.0.0.1:3000;proxy_redirect off;proxy_set_header Host $host;
}
全局变量
$args | 这个变量等于请求行中的参数,同 $query_string |
$remote_port | 客户端的端口 |
$content_length | 请求头中的 Content-length 字段 |
$remote_user | 已经经过 Auth Basic Module 验证的用户名 |
$content_type | 请求头中的 Content-Type 字段 |
$request_filename | 当前请求的文件路径,由 root 或alias指令与URI请求生成 |
$document_root | 当前请求在 root 指令中指定的值 |
$scheme | HTTP方法(如http,https) |
$host | 请求主机头字段,否则为服务器名称 |
$hostname | 主机名 |
$http_user_agent | 客户端agent信息 |
$http_cookie | 客户端cookie信息 |
$server_protocol | 请求使用的协议,通常是HTTP/1.0或HTTP/1.1 |
$server_addr | 服务器地址,在完成一次系统调用后可以确定这个值 |
$server_name | 服务器名称 |
$server_port | 请求到达服务器的端口号 |
$limit_rate | 这个变量可以限制连接速率 |
$request_method | 客户端请求的动作,如 GET/POST |
$request_uri | 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz |
$remote_addr | 客户端的IP地址 |
$uri | 不带请求参数的当前URI,$uri不包含主机名,如 /foo/bar.html |
$document_uri | 与 $uri 相同 |
$nginx_version | nginx 版本 |
更多全局变量查看官方文档
监听端口
server {listen 80; # 标准 HTTP 协议listen 443 ssl; # 标准 HTTPS 协议listen 443 ssl http2; # 对于 http2listen [::]:80; # 使用 IPv6 在 80 上收听# 仅收听使用 IPv6listen [::]:80 ipv6only=on;
}
域名 (server_name)
server {# 监听 example.comserver_name example.com;# 监听多个域server_name example.com www.example.com;# 监听所有子域server_name *.example.com;# 监听所有顶级域server_name example.*;# 监听未指定的主机名(监听 IP 地址本身)server_name "";
}
负载均衡(简单实例)
upstream node_js {server 0.0.0.0:3000;server 0.0.0.0:4000;server 127.155.142.421;
}
负载均衡(权重)
upstream test {server localhost:8080 weight=9;server localhost:8081 weight=1;
}
upstream ip_hash
upstream test {ip_hash;server localhost:8080;server localhost:8081;
}
解决负载均衡 session 的问题
upstream fair
upstream backend {fair;server localhost:8080;server localhost:8081;
}
响应时间短的优先分配
server 可选参数
weight | 访问权重数值越高,收到请求越多 |
fail_timeout | 指定的时间内必须提供响应 |
max_fails | 尝试失败服务器连接的最大次数 |
down | 标记一个服务器不再接受任何请求 |
backup | 有服务器宕机,标记的机器接收请求 |
配置示例
upstream test {server 127.0.0.1:83 weight=9; # 权重server 127.0.0.1:83 weight=1; # 权重# 失败超时时间server 127.0.0.1:83 max_fails=3;server 127.0.0.1:83 weight=3 down;
}
upstream url_hash
upstream backend {hash $request_uri;hash_method crc32;server localhost:8080;server localhost:8081;
}
按访问url的hash结果来分配请求
upstream keepalive
upstream memcached_backend {server 127.0.0.1:11211;server 10.0.0.2:11211;keepalive 32;
}
激活缓存以连接到上游服务器
子文件夹中的代理
location /folder/ { # / 很重要!proxy_pass http://127.0.0.1:3000/; # / 很重要!proxy_redirect 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;
}