初步接触 Nginx
什么是 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
26
27
28
29
30
31
32
33
34
35
36
|
# 定义工作进程数量,通常设置为 CPU 核心数,这里示例用1
worker_processes 1;
events {
# 每个工作进程允许的最大连接数(含客户端和服务器端连接)
worker_connections 1024;
}
http {
# 引入 MIME 类型映射文件,用来识别文件扩展名对应的内容类型
include mime.types;
# 默认的 MIME 类型,文件类型未匹配时使用
default_type application/octet-stream;
# 启用高效文件传输方式,减少系统调用次数
sendfile on;
# 连接保持活动的超时时间(秒),超过此时间关闭连接
keepalive_timeout 65;
server {
# 监听端口8080,HTTP服务默认端口是80,这里改为8080示例
listen 8080;
# 服务器名称,支持域名或IP,这里用localhost作为本机测试
server_name localhost;
location / {
# 网站根目录,Nginx 会从这里查找文件
root /usr/local/nginx/html/dist;
# 默认首页文件,访问目录时默认加载的文件
index index.html index.htm;
}
# 定义错误页面,当出现500、502、503、504错误时,跳转到该页面
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
Nginx 配置 lindablog.xyz 域名启用 HTTPS
一、准备条件
- 部署项目文件位置:
/usr/local/nginx/html/dist
- 阿里云申请 SSL 凭证档案(我申请的是免费证书3月一换):
jnalindablog.xyz.pem
(凭证)
jnalindablog.xyz.key
(私钥)
二、建立 SSL 凭证目录并上传ssl凭证档案
1
|
mkdir -p /usr/local/nginx/ssl
|
三、撰写 Nginx HTTPS 配置档
在 /usr/local/nginx/conf/nginx.conf
中加入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 加入這一行:引用你自定義的 server 配置檔案
include /usr/local/nginx/conf/conf.d/*.conf;
}
|
在 /usr/local/nginx/conf/conf.d/lindablog.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
26
27
28
29
30
31
32
33
34
35
36
37
|
server {
# 监听 443 端口并启用 SSL/TLS,提供 HTTPS 服务
listen 443 ssl;
# 服务器域名,配置成你的网站域名
server_name lindablog.xyz;
# SSL 证书文件路径,公钥证书
ssl_certificate /usr/local/nginx/ssl/jnalindablog.xyz.pem;
# SSL 私钥文件路径,和证书匹配的私钥
ssl_certificate_key /usr/local/nginx/ssl/jnalindablog.xyz.key;
# 允许使用的 TLS 协议版本,推荐启用 1.2 和 1.3
ssl_protocols TLSv1.2 TLSv1.3;
# 加密套件,排除掉弱加密算法,确保连接安全
ssl_ciphers HIGH:!aNULL:!MD5;
# 网站根目录,存放前端静态文件
root /usr/local/nginx/html/dist;
# 默认首页文件,访问根路径时默认加载
index index.html;
location / {
# try_files 尝试访问请求的 URI,如果不存在,则返回 index.html
# 主要用于 SPA(单页应用)支持路由刷新
try_files $uri $uri/ /index.html;
}
}
server {
# 监听 HTTP 的 80 端口,用于重定向所有请求到 HTTPS
listen 80;
# 服务器域名
server_name lindablog.xyz;
# 所有访问 80 端口的请求,都重定向(301永久重定向)到对应的 HTTPS 地址
return 301 https://$host$request_uri;
}
|
四、测试与重载 Nginx
1
2
|
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
|
五、验证 HTTPS 启用
- 浏览器访问
https://lindablog.xyz
,网址列显示锁头符号 🔒
- 点击锁头查看凭证细节或者右键检查找到隐私与安全
- 使用线上工具检查:
备注