232 字
1 分钟
CentOS 安装 Nginx 及生产环境配置指南
2026-01-08

一、安装#

# 添加 Nginx 官方 YUM 源
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装 Nginx
yum install -y nginx
# 启动并设置开机自启
systemctl start nginx
systemctl enable nginx

二、生产配置#

通常我们不会直接修改 Nginx 主配置文件,而是采用引入外部文件的方式管理多个站点。

1. 主配置文件结构#

nginx.conf
http {
# 注释掉默认的 include,防止 80 端口冲突
# include /etc/nginx/conf.d/*.conf;
# 引入自定义 HTTP 配置
include /opt/nginx/http/*.conf;
# 不限制文件上传大小
client_max_body_size 0;
}
# TCP/UDP 代理(需要在 http 块外部)
stream {
include /opt/nginx/server/*.conf;
}

2. 多站点配置#

同一端口可配置多个域名站点:

/opt/nginx/http/sites.conf
# a 站点
server {
listen 80;
server_name a.com;
# ...
}
# b 站点
server {
listen 80;
server_name b.com;
# ...
}

3. Vue 前端 + API 反向代理配置#

/opt/nginx/http/vue-app.conf
server {
listen 7000;
server_name localhost;
set $root "/app/h5";
location / {
root $root;
index index.html;
try_files $uri $uri/ /index.html;
add_header Cache-Control no-cache;
}
location ^~ /api {
# 重写:/api/xxx → /xxx
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://192.168.1.20:31100;
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_buffering off;
}
}

4. SSL 配置#

/opt/nginx/http/ssl.conf
server {
listen 80;
listen 443 ssl;
server_name abc.com;
ssl_certificate /opt/nginx/cert/abc.com.pem;
ssl_certificate_key /opt/nginx/cert/abc.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
# HTTP 自动跳转 HTTPS
error_page 497 https://$host$request_uri;
location / {
root /opt/web/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
proxy_pass http://127.0.0.1:7001/;
}
}

5. Stream TCP 反向代理(以 MySQL 为例)#

此配置需写在 stream 块内:

/opt/nginx/server/mysql.conf
upstream mysql3306 {
hash $remote_addr consistent;
server 192.168.1.58:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 33306;
proxy_connect_timeout 100s;
proxy_timeout 500s;
proxy_pass mysql3306;
}

6. WebSocket 代理配置#

代理 WebSocket 服务时需额外设置 UpgradeConnection 请求头,否则 WS 握手会失败:

/opt/nginx/http/ws-app.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 8080;
server_name localhost;
location /ws {
proxy_pass http://127.0.0.1:9000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
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_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
TIP

map 指令需放在 http 块内(通常在主配置文件中定义一次即可),用于自动将 HTTP 升级为 WebSocket 连接。proxy_read_timeout 建议设置较大值,防止长连接被提前断开。

7. MinIO 特殊配置#

如果出现 The request signature we calculated does not match the signature you provided 错误,是因为签名信息在请求头中,必须设置 proxy_set_header Host

/opt/nginx/http/minio.conf
server {
listen 9000;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_pass http://192.168.1.10:9001;
}
}
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CentOS 安装 Nginx 及生产环境配置指南
https://blog.olinl.com/posts/centos-nginx-install/
作者
顾拾柒
发布于
2026-01-08
许可协议
CC BY-NC-SA 4.0

目录