Nginx是当下使用最广泛的Web服务器软件之一,无论是托管静态网站、搭建反向代理,还是做负载均衡,它都能胜任。对刚入门的新手来说,Nginx的安装本身不难,难的是理解它的配置体系。配置文件一旦写错,轻则请求返回404,重则服务直接启动失败。这篇文章就从安装到配置,把新手必须掌握的知识点和常见的坑一次性讲清楚。

一、Nginx的安装方式与选择建议
在Linux环境下安装Nginx主要有两种方式:使用包管理器直接安装,或者下载源码编译安装。两种方式各有适用场景,新手需要根据自己的需求来选择,而不是盲目跟风源码编译。
使用包管理器安装是最简单的方式。以CentOS为例,执行yum install nginx即可完成安装;Ubuntu和Debian系统则执行apt install nginx。这种方式的好处是安装过程全自动,依赖自动解决,服务脚本也会自动配置好,执行systemctl start nginx就能启动。缺点是仓库里的版本往往不是最新的,某些新特性用不了。
源码编译安装适合对版本有要求或者需要定制模块的场景。比如需要支持某个第三方模块,包管理器安装的版本不包含,就只能编译安装。编译前需要先安装编译环境和依赖库:
# 安装编译工具和依赖 yum install -y gcc pcre-devel zlib-devel openssl-devel # 下载并解压源码 tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 # 配置编译选项,指定安装目录和开启SSL支持 ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install
编译安装完成后,Nginx会被安装到/usr/local/nginx目录下,二进制文件位于/usr/local/nginx/sbin/nginx。需要提醒的是,编译安装的版本不会自动注册systemd服务,建议手动编写一个服务单元文件,方便用systemctl统一管理。
二、核心配置文件的结构与常用指令
安装完成后,最重要的就是理解配置文件。包管理器安装的Nginx主配置文件在/etc/nginx/nginx.conf,编译安装则在/usr/local/nginx/conf/nginx.conf。整个配置文件采用嵌套的块结构,最外层是main块,里面包含events块和http块,http块内又可以嵌套server块,server块内再嵌套location块,层层递进。
main块负责全局配置,比如运行Nginx的 worker 进程数、错误日志路径、运行用户等。events块主要配置连接处理相关参数,最常用的是worker_connections,它决定每个worker进程能同时处理的最大连接数。http块则是日常改动最频繁的地方,虚拟主机、反向代理、gzip压缩、缓存等配置都写在这里。
一个典型的最小化可用配置如下:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name www.ippipp.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
其中server块定义了一个虚拟主机,listen 80表示监听80端口,server_name用于匹配请求的域名。location块则定义了针对特定路径的处理规则。root指定静态文件的根目录,index指定默认首页文件。理解了这个结构,后面不管配置多复杂的站点,本质上都是在这个骨架上做扩展。
三、反向代理与负载均衡的配置方法
Nginx最常见的高级用法是反向代理。所谓反向代理,就是客户端请求先到达Nginx,Nginx再把请求转发给后端的应用服务器,比如Tomcat、Node.js或者Python的uwsgi进程。这样做的好处是后端服务不需要直接暴露在公网,同时可以在Nginx层统一做HTTPS、限流和缓存。
反向代理的核心指令是proxy_pass,一个最简单的例子:
server {
listen 80;
server_name api.bbccb.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
这里所有请求都会被转发到本机8080端口的后端服务。两行proxy_set_header很关键,如果不设置,后端拿到的客户端IP会是Nginx所在机器的IP,获取真实IP就会出问题。
当后端有多台服务器时,可以在http块中用upstream定义一个服务器组,实现负载均衡:
upstream backend {
server 192.168.1.101:8080 weight=2;
server 192.168.1.102:8080 weight=1;
server 192.168.1.103:8080 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
weight指定权重,权重越高分到的请求越多;backup表示备用服务器,只有其他服务器都不可用时才会启用。默认的负载均衡策略是轮询,还可以通过ip_hash让同一客户端的请求固定打到同一台后端,解决session共享问题。
四、新手常见疑问与排错技巧
启动时报80端口被占用怎么办?这是最常见的问题。执行netstat -tlnp | grep 80查看占用端口的进程,很多时候是系统自带的httpd服务没停。执行systemctl stop httpd或者修改Nginx的监听端口即可解决。
修改配置后怎么让它生效?不需要重启服务,执行nginx -s reload即可平滑加载新配置。但reload之前强烈建议先执行nginx -t检查语法,这个命令会检测配置文件是否有错误并给出具体行号,能避免因配置错误导致服务中断。
location匹配规则总是搞混?记住几个要点:=是精确匹配,优先级最高;~是区分大小写的正则匹配;^~表示前缀匹配后不再检查正则;普通前缀匹配优先级最低。如果多个location都能匹配,Nginx会选择最长的前缀匹配。新手常犯的错误是正则里没加引号导致语法解析异常,遇到正则建议统一用双引号包起来。
日志在哪里看?错误日志默认在/var/log/nginx/error.log,访问日志在access.log。遇到502、504这类错误,第一步永远是看error.log,502通常是后端服务没起来或者挂了,504则是后端响应超时,可以在location里加proxy_read_timeout 300适当延长超时时间。
最后再提醒一句,生产环境部署前务必确认防火墙或云服务器的安全组已经放行对应端口,很多人配置完全正确却因为安全组没开80端口,折腾半天找不到原因。掌握这些基础知识和排错思路,Nginx入门路上的大部分坑都可以提前避开。