nginx 的使用教程

Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。以下是一个基本的 Nginx 使用教程,涵盖了安装、基本配置和常见的使用场景。

安装 Nginx

在 Ubuntu 上安装 Nginx

1
2
sudo apt update
sudo apt install nginx

在 CentOS 上安装 Nginx

1
2
sudo yum install epel-release
sudo yum install nginx

启动和停止 Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 启动 Nginx
sudo systemctl start nginx

# 停止 Nginx
sudo systemctl stop nginx

# 重启 Nginx
sudo systemctl restart nginx

# 查看 Nginx 状态
sudo systemctl status nginx

#设置开机启动
sudo systemctl enable nginx

Windows操作系统上打开并运行Nginx

  • 进入Nginx目录:

打开命令提示符(Win + R,输入cmd,回车)。
使用cd命令进入Nginx目录,例如:

1
cd C:\nginx
  • 编辑配置文件(可选):

Nginx的配置文件位于conf目录下,文件名为nginx.conf。
使用文本编辑器(如Notepad)打开nginx.conf,根据需要进行修改。

  • 启动Nginx:
    1
    start nginx
  • 验证Nginx是否启动:

打开浏览器,访问http://localhost。
如果看到“Nginx欢迎页面”,则说明Nginx已经成功启动。

Nginx 配置文件

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf。在这个文件中,你可以配置全局设置、HTTP 设置、以及虚拟主机设置。

停止Nginx:

1
2
nginx -s stop

重启Nginx:
如果需要重启Nginx,可以先停止然后再启动,或者直接使用reload命令

1
nginx -s reload

基本配置示例

以下是一个基本的 Nginx 配置示例:

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
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/\*.conf;

events {
worker_connections 768;
}

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

gzip on;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

}

配置虚拟主机

在Nginx中可以通过配置虚拟主机来管理多个网站。虚拟主机配置文件通常位于 /etc/nginx/sites-available/ 目录下,并通过符号链接到 /etc/nginx/sites-enabled/ 目录。

创建一个新的虚拟主机配置

1.创建配置文件:在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件,例如 example.com。

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name example.com www.example.com;

root /var/www/example.com;
index index.html index.htm;

location / {
try_files $uri $uri/ =404;
}
}

虚拟主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
# 1: 基于多ip的虚拟主机:listen监听不同网卡的ip,端口可相同
listen 8000;
server_name 172.17.1.1;

listen 8000;
server_name 172.17.1.2;

# 2: 基于多端口的虚拟主机:listen监听不同端口
listen 8001;
server_name localhost;

listen 8002;
server_name localhost;

#3: 基于域名的虚拟主机:端口可相同,server_name为不同域名
listen 8003;
server_name www.test1.com;

listen 8003;
server_name www.test2.com;
}

2.启用配置:通过创建符号链接将配置文件链接到 sites-enabled 目录。

1
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

3.测试配置:在重新加载 Nginx 之前,测试配置文件是否有语法错误。

1
sudo nginx -t

4.重新加载 Nginx:

1
sudo systemctl reload nginx

配置重定向

如果你希望将某个 URL 重定向到主页,可以在虚拟主机配置中添加重定向规则。例如,将 http://example.com/old-page 重定向到主页 http://example.com:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name example.com www.example.com;

root /var/www/example.com;
index index.html index.htm;

location /old-page {
return 301 http://example.com;
}

location / {
try_files $uri $uri/ =404;
}
}

配置反向代理

Nginx 也可以用作反向代理,将请求转发到后端服务器。例如,将所有请求转发到运行在 localhost:3000 的应用程序:

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name example.com www.example.com;

location / {
proxy_pass http://localhost:3000;
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;
}
}

负载均衡配置教程

  1. 基本负载均衡配置
    在Nginx的配置文件中,通过定义upstream块来设置负载均衡服务器组。假设我们有三个后端服务器:

编辑Nginx配置文件(例如/etc/nginx/nginx.conf或/etc/nginx/conf.d/load_balancer.conf)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend;
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;
}
}
}

在上面的配置中,upstream块定义了一个名为backend的服务器组,包含三个后端服务器。proxy_pass指令将请求转发到该服务器组。

  1. 负载均衡算法
    Nginx支持多种负载均衡算法,可以在upstream块中指定:
  • 轮询(默认):
    1
    2
    3
    4
    5
    6
    upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    }

  • 权重轮询:
    1
    2
    3
    4
    5
    6
    upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com weight=2;
    server backend3.example.com weight=1;
    }

  • IP哈希:
    1
    2
    3
    4
    5
    6
    7
    upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    }

  • 最少连接:
    1
    2
    3
    4
    5
    6
    7
    upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    }

配置 HTTPS

要配置 HTTPS,你需要一个 SSL 证书。你可以使用 Let’s Encrypt 免费获取一个 SSL 证书。

安装 Certbot

1
sudo apt install certbot python3-certbot-nginx

获取 SSL 证书

1
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动修改你的 Nginx 配置文件以使用 SSL 证书。