web 服务器搭建教程 nginx 在 linux 下 web 服务器搭建与配置

安装Nginx本身不算复杂,一条命令就能完成。但装好之后正常运行、解析网站、承载访问请求,中间需要调整的配置远比预想的多。很多人卡在安装后的验证环节,浏览器输入公网IP无法打开页面,排查之后才发现是防火墙没有开放80端口。踩过一次这类问题,就能记住这个关键点。

Ubuntu或者Debian系统,可以直接执行apt install nginx完成安装。CentOS和Rocky系统会多一步操作,默认软件仓库不包含Nginx,需要先添加EPEL源,再执行yum install nginx。安装完毕后执行systemctl启动服务,再用systemctl enable nginx设置开机自启。这时在浏览器输入服务器公网IP,应该能看到Nginx默认欢迎页面。看不到页面的话,先用systemctl status nginx确认服务是否正常运行,接着检查防火墙。使用ufw的系统执行ufw allow 80放行端口,firewalld则运行firewall-cmd --permanent --add-service=http,再重载配置。云服务器额外存在安全组策略,控制台内同样要放行端口。系统防火墙与云平台安全组是两层独立防护,很容易混淆,任意一侧没有放行都会导致访问失败。

web 服务器搭建教程 nginx 在 linux 下 web 服务器搭建与配置

初次接触Nginx的人容易被配置文件结构弄混乱。主配置文件路径是/etc/nginx/nginx.conf,文件内部一般会引入/etc/nginx/conf.d/.conf以及/etc/nginx/sites-enabled/目录下的配置。Ubuntu系列系统习惯将站点配置放在sites-available目录,通过软链接放到sites-enabled启用。CentOS系列处理方式更直接,直接在conf.d目录新建.conf配置文件。两种方式都可用,重点是不要随意改动主配置内全局参数,比如worker_processes和worker_connections。worker_processes设置为auto即可,Nginx会自动依据CPU核心数量适配。worker_connections默认数值1024,小型站点足够使用,并发量上涨之后再调整。

一份极简静态站点配置只有短短几行。server { listen 80; server_name example.com; root /var/www/example; index index.html; },保存为example.conf文件,运行nginx -t校验语法,没有报错就执行systemctl reload nginx。这里有个细节,reload属于平滑重载,不会中断现存连接,比restart更温和。修改配置后养成执行nginx -t的习惯,一旦存在语法错误,reload不会加载新配置,旧配置继续生效,表面看不出异常,但你的修改完全没有生效。

虚拟主机是Nginx很常用的功能,单台服务器托管多个域名。每个域名单独写一段server配置块,server_name填写对应域名,root指向各自网站目录。收到请求时,Nginx依靠请求里的Host头部匹配对应的server块。匹配优先级为精确域名最高,其次是通配符域名,正则表达式优先级最低,全部匹配失败则命中default_server。如果没有手动指定default_server,最先加载的server块就会作为默认站点。这个默认逻辑经常造成困惑,配置域名后,直接用IP访问会跳转到无关站点。解决办法是在目标默认站点配置里写上listen 80 default_server;。

反向代理属于高频使用场景。Node.js或者Python应用监听3000端口,想让外部用户通过80端口访问,就在server块内增加location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }。后面两行头部转发配置很关键,缺少它们后端程序获取到的客户端IP全部是127.0.0.1,日志无法记录真实访客地址。后端运行WebSocket服务,还需要额外转发Upgrade和Connection头部,否则连接无法建立。

SSL证书大多使用Let's Encrypt免费签发。certbot工具能够自动修改Nginx配置,执行certbot --nginx -d example.com,80端口的访问请求会自动跳转至443端口。工具自动生成的配置有时会附带多余代码行,介意的话可以手动精简。证书续期是自动化完成,certbot会添加systemd定时器或者定时任务,不需要人工操作。需要留意443端口同样要在防火墙和云安全组放行,和80端口一致,两层策略都要开启。

Nginx日志文件存放路径为/var/log/nginx/access.log与error.log。排查502报错优先查看error.log,大多是后端服务停止或者端口配置错误。504代表后端处理超时,proxy_read_timeout默认值60秒,如果后端执行耗时较长的任务,需要调大这个参数。403报错基本是文件权限问题,Nginx工作进程以www-data或者nginx用户运行,root指向的目录与文件,该用户需要具备读取权限。目录还需要x权限才允许进入,很多人给目录设置chmod 644,就会触发403,根源就是缺少目录执行权限。

性能优化方面,小型站点不需要大规模调整。开启gzip压缩能够显著降低传输体积,在http配置块添加gzip on; gzip_types text/css application/javascript;。静态资源配置较长的expires响应头,让浏览器缓存资源,减少重复请求。如果接入CDN,源站开启real_ip模块,从CDN转发请求的头部读取真实访客IP,不然access.log只会记录CDN节点地址。

还有一处容易忽略的安全细节,Nginx默认会暴露版本号,404页面或者响应头会出现nginx/1.18.0这类信息。在http块添加server_tokens off;,响应头只会显示nginx,不再展示具体版本。这算不上强力安全防护,但可以减少扫描器收集到的服务信息。修改配置后一定要执行nginx -t校验,再reload,生产环境优先避免直接重启,尽可能保持服务不中断。

免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。