微信优化

weixinyouhua

nginx网站配置怎么操作,nginx配置详细步骤是什么?

2026-10-24 09:45:42

nginx 网站配置说穿了就三件事:server 块写对、root 和 location 指对、改完先 nginx -t 再 reload。 新手被绕晕的那些报错,绝大多数都能从这三点里找到源头。

nginx网站配置怎么操作,nginx配置详细步骤是什么?

nginx 在网站里到底站在哪个位置

nginx 通常站在最外层,所有进来的请求先落到它手里,由它决定下一步:直接把磁盘上的文件吐出去,转给后端的 PHP、Node、Java 进程,还是丢给另一台服务器。

这个位置决定了它的配置逻辑,它不关心你的业务代码怎么写,只关心“什么样的请求、该去哪里、用什么方式回应”,所以配置文件的写法看起来很工程化,其实一直在重复回答这三个问题。

行业共识认为,nginx 之所以在高并发场景被大量采用,核心在于事件驱动模型和极低的内存占用,这一点直接影响配置思路你可以放心地用 nginx 挡住绝大部分静态请求,只把必要的那部分流量转给后端。

nginx 配置文件的骨架长什么样

打开 /etc/nginx/nginx.conf,会看到一层套一层的结构。

四个层级的嵌套关系

  • main:最外层,进程数、日志、PID 路径
  • events:连接处理模型,worker_connections 定在这
  • http:所有 HTTP 相关的全局设置,MIME 类型、超时、压缩
  • server:一个站点(一个域名或一组端口)
  • location:一个 URL 路径前缀下的具体规则

配置是继承的,上层写了,下层没写就沿用它;下层写了,就覆盖上层,搞不清这个,就会出现“明明改了没生效”的情况。

http 块里先调这几个开关

  • sendfile on; 静态文件走内核零拷贝,比 read+write 省事
  • keepalive_timeout 65; 长连接保持时间,按业务访问频率调
  • client_max_body_size 20m; 不设的话,上传稍大的文件直接 413
  • gzip on; 配合 gzip_types 压文本类资源,图片视频别压

server 块必须盯住的四条指令

listen 管端口,server_name 管域名匹配,root 管文件从哪读,location 管路径怎么分流,这四条对了,站点基本就活了。

nginx网站配置文件怎么写:一个静态站的最小可用版本

先别想复杂,一个纯静态站点的配置就是二十来行。

文件放哪、权限怎么给

站点配置建议单独放一个文件,别全塞进主配置:

# Debian/Ubuntu 系
/etc/nginx/sites-available/example.com
# 再软链到
/etc/nginx/sites-enabled/
# CentOS/Aliyun Linux 系
/etc/nginx/conf.d/example.com.conf

用宝塔面板的话,站点配置在 /www/server/panel/vhost/nginx/ 下,改完面板会自动重载,但手动改了别忘点保存,否则下次面板操作可能覆盖回去。

文件权限上,root 指向的目录要保证 nginx 的运行用户(通常是 nginx 或 www-data)有读权限,这一步没做,后面十有八九撞 403。

一份能直接抄的配置

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example;
    index index.html index.htm;
    access_log /var/log/nginx/example.access.log;
    error_log  /var/log/nginx/example.error.log;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ .(jpg|png|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public";
    }
}

try_files 那条是关键,它按顺序试:先找同名文件,再找同名目录,都没有就返回 404,少了它,目录访问的行为会很别扭。

nginx网站配置怎么操作,nginx配置详细步骤是什么?

验证、重载、看日志

nginx -t                  # 语法检查,先过这关
nginx -s reload           # 平滑重载,不断连接
curl -I http://127.0.0.1  # 本机验证,绕开 DNS
tail -f /var/log/nginx/error.log

永远不要在 nginx -t 没过的情况下 reload。 尤其是线上机器,配置错了重载会导致整个服务不可用,而 -t 只花你两秒。

nginx反向代理配置教程:把请求交给后端应用

静态站只是热身,真实站点多数要把请求转给后端,8080 上的 Java 服务,或者 3000 上的 Node。

location / {
    proxy_pass http://127.0.0.1:8080;
    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;
}

这四条头指令别省

少了 Host,后端拿到的域名是错的,跳转链接会指向 127.0.0.1,少了 X-Real-IP 和 X-Forwarded-For,后端日志里全是 nginx 自己的 IP,排查攻击和统计流量全废,少了 X-Forwarded-Proto,后端永远以为自己在跑 HTTP,生成的回调地址就成了 http 开头。

简米云服务器nginx配置教程里容易漏的细节

在云上配 nginx,本地能通、外网打不开,八成卡在这几处:

  1. 安全组没放行,控制台里 80 和 443 要单独加规则,这是独立于系统防火墙的一层。
  2. 系统防火墙还在拦,CentOS 系查 firewall-cmd --list-ports,Ubuntu 系查 ufw status。
  3. SELinux 拦了反向代理,CentOS 上 getenforce 显示 Enforcing,反代就会 502,需要 setsebool -P httpd_can_network_connect 1。
  4. 内网地址写成了公网 IP,后端和 nginx 在同一台机器,proxy_pass 写 0.0.1 就行,绕公网反而慢还容易触发安全策略。

upstream 做多实例负载

后端不止一个进程时:

upstream app_backend {
    server 127.0.0.1:8080 weight=3;
    server 127.0.0.1:8081 weight=1;
    keepalive 32;
}

默认轮询,加 weight 按权重分,加 ip_hash 做会话保持。keepalive 那条是给 nginx 到后端的连接复用的,配了能明显减少 TIME_WAIT。

nginx和apache配置有什么区别

这两者的差异不只是语法,思路就不一样,apache 的 .htaccess 允许目录级配置分散在各个文件夹里,nginx 则要求集中写在 server 块中。

对比项 nginx apache
配置位置 集中式,主配置或 conf.d 支持 .htaccess 分散
生效方式 改完 reload .htaccess 即时生效
静态资源 事件驱动,占用低 进程/线程模型,占用高
伪静态写法 rewrite 或 try_files RewriteRule
目录权限 全局控制 可逐目录控制

从 apache 迁过来的站点,最常见的坑是把 .htaccess 里的重写规则照搬,nginx 不支持 .htaccess,得把规则翻译成 location + try_files 或 rewrite,尤其是 WordPress 那套固定链接规则,直接搬必失效。

HTTPS 这块要花多少钱

搜索“nginx 配置 https 证书多少钱”的人,多半是在纠结免费证书够不够用。

DV 域名型证书有免费路线:Let’s Encrypt 通过 certbot 自动签发和续期,单域名 DV 证书在云厂商处也常年有免费额度,缺点是要定期续,忘了就红锁。

付费证书从一年几十元到数千元不等,差价主要来自验证等级(DV / OV / EV)和保障额度,加密强度本身并没有本质差别,个人站和小型业务,免费证书完全够用。

nginx网站配置怎么操作,nginx配置详细步骤是什么?

配置也就三行关键指令:

listen 443 ssl http2;
ssl_certificate     /etc/nginx/ssl/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;

证书链不完整是 HTTPS 配置的高频翻车点,浏览器能开,但部分安卓机或小程序报证书错误原因是 .pem 里只有站点证书,缺中间 CA,用 openssl s_client -connect example.com:443 -showcerts 能看出链条断在哪。

改完配置别急着重启

nginx -t 到底在检查什么

只检查语法和文件可读性,不检查目录权限、不检查后端通不通。-t 过了也不代表站点正常,它只是排除了最低级的错误。

三个高频报错分别指向哪

403 Forbidden

优先查两处:root 目录对 nginx 运行用户是否可读,以及 index 指定的文件是否存在,目录取可执行权限(x),文件取读权限(r),缺一不可。

404 Not Found

root 路径拼错了,或者 location 优先级不对。location / 和 location ~ .php$ 这种正则块谁先匹配,结果会不一样,用 nginx -T 打印完整生效配置来确认。

502 Bad Gateway

后端没起来,或者 proxy_pass 地址、端口写错,先 ss -lntp | grep 8080 确认端口在监听,再 curl http://127.0.0.1:8080 看后端自己是否正常,很快能定位是哪一段断的。

nginx 网站配置的常见疑问

nginx 配置文件改完必须重启吗

不需要。nginx -s reload 是平滑重载,旧 worker 处理完手上的请求才退出,用户无感知。restart 会断连接,只在改动了 listen 端口这类底层项、或者 reload 报错时才用。

一个 nginx 能配几个网站

数量上没有硬限制,实际取决于内存和连接数,每个 server 块的开销很小,几百个站点在一台中等配置的机器上跑是常见做法,真正的瓶颈在 worker_connections 和文件描述符上限,后者要在 nginx.conf 里用 worker_rlimit_nofile 调,同时改系统 ulimit。

配置写完怎么确认线上真的生效了

用 nginx -T 输出完整合并后的配置,搜索你的 server_name,看实际加载的是哪一份,再用 curl -I -H "Host: example.com" http://127.0.0.1 直接打到本机,跳过 DNS 和 CDN,返回头和状态码对不对一眼就清楚,这两个命令组合,能排除掉“改了另一个文件”和“缓存没清”这两类最常见的假故障。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待