上线部署之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

相关推荐
hweiyu002 小时前
Linux命令:iostat
linux·运维
Lentou2 小时前
上线部署之查看系统详细信息(麒麟高级服务器操作系统 V10)
运维·服务器
桌面运维家2 小时前
vDisk IDV云桌面机房部署方案服务器安装教程
运维·服务器
涛声依旧393162 小时前
运维项目实战:Nginx+Docker 部署HTTPS站点+身份认证
运维·nginx·docker·云原生·容器·https
有谁看见我的剑了?2 小时前
Rocky Linux 更换 阿里云的镜像源
linux·运维·阿里云
七夜zippoe2 小时前
OpenClaw 定时任务与 Cron 调度:自动化运维的智能引擎
运维·人工智能·自动化·cron·openclaw
marsh02062 小时前
35 openclawCQRS模式应用:分离读写操作提升性能
运维·ai·jenkins·编程·技术
IMPYLH2 小时前
Linux 的 readlink 命令
linux·运维·服务器·网络·bash
一个小浪吴啊2 小时前
Linux/Mac Hermes Agent部署教程
linux·运维·macos·ai·ai编程