上线部署之Nginx相关,解析相关nginx配置

powershell 复制代码
# 指定 Nginx 服务运行时使用的系统用户是 nginx,控制文件权限,避免用 root 运行带来安全风险
user nginx;
# 工作进程数 = 自动匹配服务器 CPU 核心数,让 Nginx 自动最优利用 CPU 性能
worker_processes auto;
#  错误日志存到 /var/log/nginx/error.log,日志级别是 notice,记录 Nginx 启动失败、请求报错等信息
error_log /var/log/nginx/error.log notice;
# 把 Nginx 主进程的 PID 号存到这个文件,方便重启 / 停止 Nginx 时找到进程
pid /run/nginx.pid;
#  事件模块配置,每个工作进程最大支持 1024 个并发连接,控制 Nginx 能同时处理多少用户请求
events {
    worker_connections 1024;
}
#  HTTP 服务配置块开始,所有网站、代理、日志都写在这里面
http {
		#  加载系统预设的文件类型配置,让 Nginx 认识 .html/.css/.js/.jpg 等文件
    include       /etc/nginx/mime.types;
    # 不认识的文件默认按 "二进制流" 处理,避免未知文件无法下载 / 访问
    default_type  application/octet-stream;
		#  定义访问日志格式,名字叫 main 记录内容包括:1访问者 IP2访问时间3请求地址4状态码5浏览器信息6转发 IP 等
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
    # 访问日志存到 /var/log/nginx/access.log,使用上面定义的 main 格式
    access_log /var/log/nginx/access.log main;
		#  开启高效文件传输模式,静态文件(图片、JS、CSS)访问更快
    sendfile        on;
    #tcp_nopush     on;
    # 长连接保持 65 秒,减少重复建立连接,
    keepalive_timeout  65;

    # 开启Gzip压缩,把网页、CSS、JS、JSON 压缩后传输,提升速度,网站加载速度大幅提升
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json application/javascript;

    # 一个网站服务配置块开始,前端服务 + 后端代理 合并到同一个server块(同源最优方案)
    server {
    		  #   监听 80 端口(HTTP 默认端口)
        listen       80;
        #  这个网站对应的域名 / IP  访问 http://IP 就会进入这个 server
        server_name  域名IP;

        # 匹配所有请求 / 开头的路径(即所有页面)前端静态文件
        location / {
       #  前端静态文件放在 /usr/local/hjjk/dist 目录
            root   /usr/local/hjjk/dist;
            #  默认首页文件是 index.html
            index  index.html;
            #  找不到文件时,统一返回 index.html
            try_files $uri $uri/ /index.html; # 解决Vue路由刷新404
        }

        # 后端API反向代理 /s/xxx → 转发到后端
			 # 匹配所有以 /s/ 开头的请求
			 # ~ 表示正则匹配
			 # (.*) 是捕获后面所有路径
        location ~ ^/s/(.*)$ {
        # 把 /s/xxx 转发到后端服务
			 #访问 /s/user
			 #实际转发到 http://IP:端口/api/public/air/user
            proxy_pass http://IP:端口/api/$1;
            # 传递真实信息给后端否则后端拿到的 IP 都是 Nginx 的,不是用户的
            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;

            # 处理跨域 (CORS) - 精准配置前端访问域名跨域配置,但目前被注释了,不生效
            #add_header 'Access-Control-Allow-Origin' 'http://IP:端口' always;
            #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
            #add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
            #add_header 'Access-Control-Allow-Credentials' 'true' always;

            # 处理浏览器发送的 OPTIONS 预检请求
            # 让跨域请求正常通过 返回 204 表示无内容,成功通过
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain; charset=utf-8';
                add_header 'Content-Length' 0;
                return 204;
            }
        }

        # 错误页配置 服务器出错(500/502/503/504)时,显示 50x.html 页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
         # 错误页面放在 /usr/share/nginx/html 目录
            root   /usr/share/nginx/html;
        }
    }
}

一、Nginx 最核心的 3 个概念

1. 主配置结构(写配置按这个顺序)

复制代码
全局块(user、worker_processes、pid...)
events 块(连接数)
http 块(里面放所有网站)
    server 块(一个网站 = 一个 server)
        location 块(匹配不同路径)

顺序不能乱,乱了直接启动失败。

2. location 匹配规则

Nginx 匹配路径不是按顺序 ,是按优先级

复制代码
=      精准匹配  优先级最高
^~     前缀匹配  第二
~      正则区分大小写
~*     正则不区分大小写
/      通用匹配(最后兜底)

现在配置里用的:

复制代码
location ~ ^/s/(.*)$

就是正则匹配 ,优先级比普通 / 高。

3. 反向代理 vs 负载均衡

  • 反向代理:把请求转给后端(你现在用的)
  • 负载均衡:把请求分给多台后端服务器(高可用必备)

二、日常操作必背命令

bash 复制代码
# 检查配置是否写错(最常用!改完必执行)
nginx -t

# 平滑重启(不中断用户访问)
nginx -s reload

# 启动
nginx

# 停止
nginx -s stop

# 查看版本
nginx -v

重点:

改配置后永远先 nginx -t ,再 reload!

否则写错一行,服务直接挂。


三、配置必须注意的 6 个坑

1. Vue/React 前端刷新 404

配置里已经写了:

复制代码
try_files $uri $uri/ /index.html;

✅ 正确,这是唯一正确写法,少了就会 404。

2. 静态文件缓存

前端 dist 目录建议加强缓存

复制代码
location / {
    root /usr/local/hjjk/dist;
    index index.html;
    try_files $uri $uri/ /index.html;

    # 缓存静态资源
    expires 7d;
}

不加的话每次都重新下载,网站巨慢。

3. 跨域问题

配置里跨域是注释的:

复制代码
#add_header ...

如果前后端分离出现跨域,必须打开,否则前端调不通接口。

4. listen 80 端口冲突

如果服务器启动失败,大概率是:

  • 80 端口被 Apache/其他服务占用
  • 防火墙没放行 80 端口

5. SELinux 导致 403 Forbidden

如果访问出现 403,不是权限,是 SELinux:

bash 复制代码
setenforce 0

临时关闭,就能访问。

6. root 与 alias 区别

  • root:路径会拼接
  • alias:路径不会拼接

现在用的是 root,正确。


四、生产环境必备优化

1. 隐藏 Nginx 版本号(安全)

复制代码
http {
    server_tokens off;
}

2. 提高并发连接数

复制代码
events {
    worker_connections  10240;  # 提高到 1 万
    use epoll;
    multi_accept on;
}

3. 禁止恶意域名访问

复制代码
server {
    listen 80 default_server;
    return 444;
}

4. 防止文件被下载(如 .env、.sql)

复制代码
location ~ /\.env {
    deny all;
}

五、日志排查

看错误日志

复制代码
tail -f /var/log/nginx/error.log

常见错误:

  • 502 = 后端服务没启动
  • 403 = 权限/SELinux
  • 404 = 路径不对
  • 500 = 后端代码报错

看访问日志

复制代码
tail -f /var/log/nginx/access.log

六、HTTPS 配置

免费证书用 Let's Encrypt,一行命令搞定:

复制代码
certbot --nginx

自动帮你配置好:

  • 80 端口跳转 443
  • SSL 证书
  • 安全协议

七、最常用的 4 大功能

  1. 反向代理
  2. 负载均衡(多台后端)
  3. 静态资源托管(前端、图片)
  4. 接口限流、防盗链、黑白名单

八、一句话总结 Nginx 核心作用

Nginx 就是一个:接收用户请求 → 分发到正确地方(前端/后端)的中间管家。


总结

  1. 改配置先 nginx -t,再 reload
  2. location 匹配看优先级,不是顺序
  3. Vue 必须加 try_files 解决刷新 404
  4. 403 大概率是 SELinux
  5. 502 是后端服务挂了
  6. 生产环境一定要开缓存 + Gzip

相关推荐
ping某16 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes