返回

初步接触Nginx


初步接触 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
ps -ef | grep nginx

输出示例:

1
2
root    706455   1    0 12:34 ?  nginx: master process ./nginx
nobody  706456   ...  0 12:34 ?  nginx: worker process

判断启动状态:

  • ✔️ 正常:出现 master processworker 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,网址列显示锁头符号 🔒
  • 点击锁头查看凭证细节或者右键检查找到隐私与安全
  • 使用线上工具检查:

备注

  • .pem.crt 可通用于 Nginx
404_@林达所作
最后更新于 Jun 01, 2025 12:25 +0800
使用 Hugo 构建
主题 StackJimmy 设计