什么是 Nginx?
Nginx(engine x) 是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 邮件代理服务器。
由 Igor Sysoev 编写,最初用于俄罗斯访问量最大的网站之一。如今,它广泛应用于各类网站的:
- 静态资源服务(如 HTML、CSS、JS、图片等)
- 反向代理(把请求转发到后端服务)
- 负载均衡(分发请求以提升性能与可用性)
- HTTPS / SSL 支持
- 动态请求的缓存与压缩处理
为什么使用 Nginx?
Nginx 被广泛采用的原因包括:
- 🚀 高性能:可以支撑成千上万个并发连接
- ⚙️ 资源占用小:内存占用远低于 Apache
- 🔁 反向代理 + 负载均衡:非常适合部署在微服务架构中
- 🔒 支持 HTTPS / SSL
- 🔧 模块化配置:配置灵活,易于扩展
安装 Nginx
1. 安装依赖
1
2
3
4
|
yum install gcc gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
|
2. 下载并解压 Nginx
1
2
3
4
|
cd /usr/local
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
cd nginx-1.22.1
|
3. 编译安装
1
2
3
|
./configure --with-http_ssl_module # 添加 SSL 模块支持
make # 编译
make install # 安装
|
🚀 常用命令整理
在 /usr/local/nginx/sbin
目录下运行:
1
2
3
|
./nginx # 启动 Nginx
./nginx -s reload # 热重载配置
./nginx -s stop # 停止 Nginx
|
检查是否启动成功
输出示例:
1
2
|
root 706455 1 0 12:34 ? nginx: master process ./nginx
nobody 706456 ... 0 12:34 ? nginx: worker process
|
判断启动状态:
- ✔️ 正常:出现
master process
和 worker process
- ❌ 异常:只有
master
没有 worker
,说明配置有误
- ⚠️ 多个进程:说明重复启动了,建议先执行
pkill nginx
配置与测试
📄 配置文件示例(nginx.conf
)
路径:/usr/local/nginx/conf/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
location / {
root /usr/local/nginx/html/dist;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
}
}
|
测试是否成功
1
|
curl http://<你的公网IP>:8080
|
- 如果返回页面内容,说明 Nginx 成功响应
- 否则检查防火墙 / 端口是否开放
⚠️ 注意事项
- 监听端口为 8080(非默认 80),需特别注意防火墙设置
- 如果你使用的是 阿里云服务器,请在控制台:
- 找到安全组 → 编辑入方向规则 → 开放 8080 端口
即使云服务器厂商(如阿里云、腾讯云等)的“安全组”已经开放端口,如果 服务器操作系统内部 还有防火墙规则没有放行对应端口,也会导致无法访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
systemctl status firewalld
# 若正在运行,执行查看端口开放情况
firewall-cmd --list-all
# 若未开放指定端口,可执行
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
# 再次执行查看端口开放情况
firewall-cmd --list-all
##实操
[root@iZbp15al0g417943ohz4h1Z ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports: 20/tcp 21/tcp 22/tcp 80/tcp 443/tcp 8888/tcp 39000-40000/tcp 9999/tcp 8080/tcp # 没有8989端口
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@iZbp15al0g417943ohz4h1Z ~]# firewall-cmd --permanent --add-port=8989/tcp
success
[root@iZbp15al0g417943ohz4h1Z ~]# firewall-cmd --reload
^[[Asuccess
[root@iZbp15al0g417943ohz4h1Z ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports: 20/tcp 21/tcp 22/tcp 80/tcp 443/tcp 8888/tcp 39000-40000/tcp 9999/tcp 8080/tcp 8989/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
|
- 若你更喜欢默认 HTTP 端口
80
,可将 listen 8080
改为 listen 80