10人参与 • 2026-08-02 • Mysql
在配置nginx作为反向代理服务器时,你需要了解一些基本的概念和配置项。反向代理服务器通常用于将客户端请求转发到内部网络中的一台或多台服务器上,然后将服务器的响应返回给客户端。这对于负载均衡、缓存静态文件、ssl终止等场景非常有用。
面向日常运维:能装、能反代、能改常用参数。
sudo dnf install -y nginx # 或 yum sudo systemctl enable --now nginx nginx -v curl -i http://127.0.0.1
sudo apt update sudo apt install -y nginx sudo systemctl enable --now nginx nginx -v
按 nginx.org 添加对应发行版源后再安装,适合要新特性(如较新 tls、模块)的场景。
docker run -d --name nginx -p 8080:80 nginx:stable
| 命令 | 作用 |
|---|---|
| 检查配置语法 |
| 打印全部生效配置 |
| 平滑重载配置 |
| 同上(systemd) |
| 看进程状态 |
| 访问日志 |
| 错误日志 |
| 系统 | 主配置 | 站点配置 |
|---|---|---|
rhel 系 |
|
|
debian 系 |
|
|
改完务必:
sudo nginx -t && sudo systemctl reload nginx
假设本机有一个后端:127.0.0.1:3000(node/java/go 均可)。
/etc/nginx/conf.d/app.conf:
server {
listen 80;
server_name api.example.com; # 本地可先写 _ 或 localhost
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
}验证:
sudo nginx -t && sudo systemctl reload nginx curl -h "host: api.example.com" http://127.0.0.1/
upstream user_svc { server 127.0.0.1:3001; }
upstream order_svc { server 127.0.0.1:3002; }
server {
listen 80;
server_name api.example.com;
location /user/ {
proxy_pass http://user_svc/; # 注意末尾 /
include /etc/nginx/proxy_params; # debian 有;没有就手写 header
}
location /order/ {
proxy_pass http://order_svc/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
}proxy_pass 末尾斜杠(必懂):
| 写法 | 请求 /user/list 实际转到 |
|---|---|
|
|
|
|
server {
listen 80;
server_name www.example.com;
root /var/www/app/dist;
index index.html;
# 前端 spa
location / {
try_files $uri $uri/ /index.html;
}
# 接口走后端
location /api/ {
proxy_pass http://127.0.0.1:8080/api/;
proxy_http_version 1.1;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
proxy_connect_timeout 3s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
client_max_body_size 20m;
}
}upstream app_backend {
least_conn;
keepalive 32;
server 10.0.1.11:8080 weight=3 max_fails=3 fail_timeout=10s;
server 10.0.1.12:8080 weight=2 max_fails=3 fail_timeout=10s;
server 10.0.1.13:8080 backup;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://app_backend;
proxy_http_version 1.1;
proxy_set_header connection "";
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
}发布摘流:把某台改成 down,nginx -t && reload。
server {
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /etc/nginx/ssl/api.example.com.fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/api.example.com.key;
ssl_protocols tlsv1.2 tlsv1.3;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto https;
}
}location /ws/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header upgrade $http_upgrade;
proxy_set_header connection "upgrade";
proxy_set_header host $host;
proxy_read_timeout 3600s;
}worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 10240;
multi_accept on;
}| 项 | 含义 |
|---|---|
| worker 进程数,一般 |
| 单 worker 最大连接数 |
| 进程可打开文件数上限 |
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
server_tokens off; # 隐藏版本号
client_max_body_size 20m; # 上传限制(全局默认)
}| 配置项 | 作用 | 常用值 |
|---|---|---|
| 转发目标 |
|
| 传给上游的头 | host / x-forwarded-* |
| 连上游超时 |
|
| 向下游发请求超时 |
|
| 等上游响应超时 |
|
| 是否缓冲上游响应 | 默认 on;sse 常 off |
| 上游 http 版本 |
|
| 最大上传 | 按业务,如 |
| 是否先收完 body 再转 | 大上传有时可 off |
location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico|woff2)$ {
expires 30d;
add_header cache-control "public, immutable";
access_log off;
}
location = /index.html {
add_header cache-control "no-cache";
}| 项 | 作用 |
|---|---|
| 文件根目录,uri 拼在后面 |
| 路径替换(目录末尾 |
| 依次尝试文件,常用于 spa |
| 过期时间 |
| 压缩文本响应 |
| 项 | 作用 |
|---|---|
| 证书(建议全链) |
| 私钥 |
| 协议版本 |
| 加密套件(有公司基线就跟基线) |
| 开启 http/2( |
# http 段 limit_req_zone $binary_remote_addr zone=api_rate:10m rate=20r/s; limit_conn_zone $binary_remote_addr zone=api_conn:10m; # server/location 段 limit_req zone=api_rate burst=40 nodelay; limit_conn api_conn 30;
| 项 | 作用 |
|---|---|
| 平均速率 |
| 允许突发 |
| 突发立即处理,不排队等 |
| 单 ip 并发连接上限 |
log_format main '$remote_addr - $request_id [$time_local] '
'"$request" $status $body_bytes_sent '
'rt=$request_time urt=$upstream_response_time '
'upstream=$upstream_addr us=$upstream_status '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;排障常看:$request_time、$upstream_response_time、$upstream_status。
return 301 https://$host$request_uri; # 推荐:简单跳转 rewrite ^/old/(.*)$ /new/$1 permanent; # 路径改写
能用 return 就少用复杂 rewrite;少用 if。
location /admin/ {
allow 10.0.0.0/8;
allow 192.168.1.0/24;
deny all;
}location = /healthz {
access_log off;
return 200 'ok';
add_header content-type text/plain;
}upstream app {
least_conn;
keepalive 32;
server 127.0.0.1:8080 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name app.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name app.example.com;
ssl_certificate /etc/nginx/ssl/app.fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/app.key;
ssl_protocols tlsv1.2 tlsv1.3;
server_tokens off;
client_max_body_size 20m;
access_log /var/log/nginx/app.access.log main;
error_log /var/log/nginx/app.error.log warn;
location = /healthz {
access_log off;
return 200 'ok';
add_header content-type text/plain;
}
location / {
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header connection "";
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
proxy_connect_timeout 3s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}error.logproxy_read_timeout 调很小,后端 sleep,观察 504upstream 两台(可用两端口模拟),测摘流dist + /api/ 反代limit_req,用 ab/wrk 打出 503sudo cp /etc/nginx/conf.d/app.conf /etc/nginx/conf.d/app.conf.bak.$(date +%f-%h%m) sudo nginx -t && sudo systemctl reload nginx tail -n 50 /var/log/nginx/error.log
语法错不要强行 reload;reload 后先看状态码和错误日志。
到此这篇关于nginx安装反向代理实战及常见配置项的文章就介绍到这了,更多相关nginx反向代理配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论