Linux 部署 Nginx:从安装到反向代理配置
Linux 部署 Nginx:从安装到反向代理配置
1. 前言
Nginx 是 Linux 服务器上非常常用的 Web 服务软件。
它可以用来做:
- 静态网站服务器;
- 反向代理;
- 负载均衡;
- HTTPS 入口;
- 前端项目部署;
- 后端服务网关;
- 图片、视频等静态资源服务。
本文主要讲解如何在 Linux 上安装 Nginx,并完成一个最常见的反向代理配置。
本文重点包括:
- Nginx 安装;
- Nginx 服务管理;
- 配置文件结构;
- 静态页面测试;
- 反向代理配置;
- 日志查看;
- 常见问题排查。
2. 安装 Nginx
2.1 Ubuntu / Debian
sudo apt update
sudo apt install nginx -y
查看版本:
nginx -v
启动 Nginx:
sudo systemctl start nginx
设置开机自启:
sudo systemctl enable nginx
查看状态:
sudo systemctl status nginx
2.2 CentOS / RHEL
sudo yum install nginx -y
如果默认仓库没有 Nginx,可以先安装 EPEL 源:
sudo yum install epel-release -y
sudo yum install nginx -y
启动服务:
sudo systemctl start nginx
sudo systemctl enable nginx
3. 测试 Nginx 是否启动成功
本机测试:
curl http://127.0.0.1
如果返回 HTML 内容,说明 Nginx 已经正常工作。
查看监听端口:
ss -lntp | grep ':80'
正常情况下可以看到 Nginx 监听 80 端口。
浏览器访问:
http://服务器IP
如果访问不到,继续检查:
sudo systemctl status nginx
sudo firewall-cmd --list-ports
sudo iptables -L -n
云服务器还要检查安全组是否开放 80 端口。
4. Nginx 常用目录
不同发行版略有差异,但常见路径如下:
| 路径 | 作用 |
|---|---|
/etc/nginx/nginx.conf |
Nginx 主配置文件 |
/etc/nginx/conf.d/ |
子配置文件目录 |
/etc/nginx/sites-available/ |
Debian/Ubuntu 常见站点配置目录 |
/etc/nginx/sites-enabled/ |
Debian/Ubuntu 已启用站点配置 |
/usr/share/nginx/html |
默认静态页面目录 |
/var/www/html |
常见网站根目录 |
/var/log/nginx/access.log |
访问日志 |
/var/log/nginx/error.log |
错误日志 |
查看主配置:
sudo nginx -T
nginx -T 会输出完整配置,适合排查最终生效的配置。
5. Nginx 配置文件结构
一个典型 Nginx 配置大致如下:
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
}
核心结构:
main
├── events
└── http
└── server
└── location
| 配置块 | 作用 |
|---|---|
main |
全局配置 |
events |
连接处理配置 |
http |
HTTP 服务配置 |
server |
一个虚拟主机 |
location |
路由匹配规则 |
6. 配置静态页面
创建网站目录:
sudo mkdir -p /var/www/demo
创建首页:
echo "Hello Nginx" | sudo tee /var/www/demo/index.html
创建配置文件:
sudo vim /etc/nginx/conf.d/demo.conf
写入:
server {
listen 80;
server_name _;
location / {
root /var/www/demo;
index index.html;
}
}
检查配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
访问:
curl http://127.0.0.1
7. Nginx 反向代理是什么
反向代理可以理解为:
客户端访问 Nginx
Nginx 再转发请求给后端服务
后端返回结果给 Nginx
Nginx 再返回给客户端
例如后端服务运行在:
127.0.0.1:8080
用户访问:
http://example.com/api
Nginx 把请求转发到:
http://127.0.0.1:8080
这样用户不需要直接访问后端端口。
8. 配置反向代理
假设后端服务监听:
127.0.0.1:8080
Nginx 配置:
server {
listen 80;
server_name example.com;
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;
}
}
保存后检查配置:
sudo nginx -t
重载:
sudo systemctl reload nginx
9. proxy_pass 末尾斜杠问题
Nginx 中 proxy_pass 末尾有没有 /,行为不一样。
示例一:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
请求:
/api/user
转发到:
/user
示例二:
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
请求:
/api/user
转发到:
/api/user
这点非常容易踩坑。
如果后端接口路径不对,优先检查 proxy_pass 的斜杠。
10. 常用代理头
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;
含义:
| Header | 作用 |
|---|---|
Host |
保留原始域名 |
X-Real-IP |
传递真实客户端 IP |
X-Forwarded-For |
记录代理链路中的客户端 IP |
X-Forwarded-Proto |
传递 HTTP/HTTPS 协议 |
后端服务如果需要获取真实 IP,通常要依赖这些 Header。
11. Nginx 日志查看
访问日志:
tail -f /var/log/nginx/access.log
错误日志:
tail -f /var/log/nginx/error.log
查找 500 错误:
grep " 500 " /var/log/nginx/access.log
查看最近错误:
tail -n 100 /var/log/nginx/error.log
12. 常见问题排查
12.1 配置文件语法错误
检查:
sudo nginx -t
如果有错误,会显示具体文件和行号。
12.2 端口被占用
sudo ss -lntp | grep ':80'
如果 80 被其他程序占用,Nginx 会启动失败。
12.3 反向代理 502
常见原因:
- 后端服务没启动;
- 后端端口写错;
- 后端只监听 127.0.0.1 或监听地址不对;
- 防火墙拦截;
- proxy_pass 地址错误。
排查:
curl http://127.0.0.1:8080
tail -f /var/log/nginx/error.log
12.4 修改配置不生效
修改配置后需要:
sudo nginx -t
sudo systemctl reload nginx
如果只是保存文件,不 reload,配置不会生效。
13. 小结
Linux 部署 Nginx 的核心流程:
安装 Nginx
↓
启动并设置开机自启
↓
确认 80 端口监听
↓
配置 server 和 location
↓
nginx -t 检查配置
↓
systemctl reload nginx 重载
↓
查看 access.log 和 error.log 排查问题
常用命令:
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo nginx -t
sudo systemctl reload nginx
ss -lntp | grep ':80'
tail -f /var/log/nginx/error.log
掌握这些内容后,就可以继续学习静态网站部署、HTTPS 配置、负载均衡和更复杂的反向代理场景。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)