Nginx反向代理配置
引言
Nginx是一款高性能的开源Web服务器和反向代理服务器,广泛应用于现代应用程序的部署和负载均衡。它具有轻量级、高并发和低内存消耗的特点,能够处理大量的并发连接和高流量的网络请求。
本博文将介绍Linux下Nginx的安装和卸载方法,以美西VPS(Ubuntu 22.04)为例,并重点探讨如何配置Nginx作为反向代理服务器。
Nginx的安装与卸载
安装
-
更新软件包列表
1
sudo apt update
-
安装Nginx
1
sudo apt install nginx
-
验证安装
1
nginx -v
如果安装成功,将显示Nginx的版本信息。
卸载
-
卸载Nginx
1
sudo apt remove nginx
-
清理残留文件
1
sudo apt autoremove
反向代理的配置
什么是反向代理
反向代理是一种服务器架构模式,它充当位于客户端和目标服务器之间的中间层。当客户端发送请求时,反向代理服务器接收请求并将其转发到后端的目标服务器。然后,代理服务器将响应从目标服务器返回给客户端。通过这种方式,反向代理隐藏了后端服务器的真实身份和位置,为客户端提供了更高的安全性、负载均衡和缓存等功能。
配置Nginx作为反向代理服务器
下面是配置Nginx作为反向代理服务器的步骤:
方法一
Nginx的主要配置文件是 nginx.conf,通常位于 /etc/nginx/ 目录下。通过编辑此文件,我们可以进行各种配置。
1 | sudo nano /etc/nginx/nginx.conf |
nginx.conf文件内容如下:
1 | user www-data; |
在Nginx的配置文件中,events、http和mail是三个不同的块,用于配置不同的功能和模块。下面是对这些块的解释:
events块
events块用于配置Nginx的事件处理机制。它定义了与客户端的连接和网络事件相关的参数,如并发连接数、连接超时等。在这个块中,您可以设置以下参数:
worker_connections:指定每个worker进程可同时处理的连接数。multi_accept:允许一个worker进程同时接受多个连接。- 其他与事件相关的参数。
例如,在示例配置中,events块中设置了worker_connections参数为768,表示每个worker进程可以同时处理768个连接。
http块
http块是Nginx配置文件中最常见的块,用于配置HTTP服务器和相关功能。它包含了与HTTP请求、响应和代理等相关的配置指令。在这个块中,您可以设置以下内容:
- 基本设置:如
sendfile、tcp_nopush、types_hash_max_size等。 - SSL/TLS设置:如
ssl_protocols、ssl_prefer_server_ciphers等。 - 日志设置:如
access_log、error_log等。 - Gzip设置:如启用或禁用gzip压缩。
- 虚拟主机配置:使用
server块来定义不同的虚拟主机。
在示例配置中,http块包含了基本设置、SSL设置、日志设置和Gzip设置,并通过include指令包含了额外的配置文件和虚拟主机配置。
mail块
mail块是用于配置Nginx作为邮件代理服务器的功能。它定义了与POP3和IMAP协议相关的配置指令。在这个块中,您可以设置代理服务器的监听端口和协议,以及与认证和代理相关的配置。
在示例配置中,mail块被注释掉了,因此在此示例中并不会实际使用邮件代理功能。
请注意,http块是最常见和常用的块,用于配置Nginx作为HTTP服务器和反向代理服务器。events块和mail块是可选的,根据您的需求和使用场景进行配置。
在http块内部,可以添加多个server块来定义不同的虚拟主机。每个server块可以针对特定的域名、IP地址或端口进行配置。
一般来说,server块的添加位置可以在http块中的任何位置,只要它在文件中的唯一位置即可。通常,建议将默认的server块放在http块的开头,以处理未匹配到其他虚拟主机的请求。然后,可以根据需要添加其他server块来处理其他域名或IP地址的请求。
因此,如果要在nginx.conf文件中加入新的server块,建议加入到http块的最后面,即include部分的后面,因为include部分调用了默认的server块。
下面是一个示例,展示了http块中的位置以及如何添加多个server块:
1 | http { |
server块的主要组成部分包括:
-
listen指令:listen指令用于指定Nginx服务器监听的端口。可以是一个具体的端口号(如80),也可以是IP地址加端口号(如192.168.0.1:8080)。还可以使用特殊的监听地址,如default_server用于指定默认的虚拟主机。 -
server_name指令:server_name指令用于指定虚拟主机所对应的域名或IP地址。可以使用具体的域名(如example.com)或使用通配符(如*.example.com)来匹配多个域名。 -
配置指令和内容:
在
server块中,可以设置各种配置指令和内容来定义特定虚拟主机的行为。这些指令可以包括但不限于:root:指定虚拟主机的根目录。index:指定默认的索引文件。location:用于定义请求路径的处理规则。- SSL/TLS配置:如
ssl_certificate、ssl_certificate_key等用于启用HTTPS的指令。
以下是一个示例,展示了server块的基本格式和一些常见的配置指令
1 | server { |
在上述示例中,第一个server块定义了一个虚拟主机,监听80端口,即通过http访问,对应的域名是http://a.example.com。根目录为/var/www/a.example.com,默认索引文件为index.html。此外,使用location块定义了对根路径和/images路径的请求处理规则。
第二个server块定义了一个虚拟主机,监听443端口,即通过https访问,对应的域名是https://b.example.com。根目录为/var/www/b.example.com,默认索引文件为index.html。此外,使用location块定义了对根路径和/images路径的请求处理规则。
请注意,可以在同一个Nginx配置文件中定义多个server块,以配置多个虚拟主机或监听多个端口。每个server块表示一个独立的虚拟主机配置。根据需要,可以根据域名、IP地址或端口来定义多个server块。
在完成配置文件的编辑后,需要重载Nginx配置以使更改生效。
- 检查Nginx配置文件是否正确,若提示
successful,则证明配置没问题。
1 | sudo nginx -t |
- 如果配置文件没有错误,重新加载Nginx配置
1 | sudo systemctl reload nginx |
或者,使用以下命令(适用于非systemd系统)
1 | sudo service nginx reload |
- 验证反向代理
访问代理服务器的域名或IP地址,验证是否能够成功访问到,能访问到证明nginx反代成功
方法二
server块不写入到nginx.conf文件中,而是在nginx文件目录下的sites-available文件夹中新建.conf文件,并写入对应的server块。
-
在
sites-available文件夹中创建一个新的配置文件,例如my-proxy.conf,可以使用任何你喜欢的名称,但要确保文件扩展名是.conf -
使用文本编辑器打开新创建的配置文件,并添加反向代理的配置信息。以下是一个示例:
1
2
3
4
5
6
7
8
9
10
11server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}在上述示例中,配置了一个基本的反向代理。当访问
example.com时,请求将被代理到backend_server。请根据实际情况修改以下内容:
listen:指定Nginx监听的端口,可以是80或443等。server_name:指定要进行反向代理的域名。proxy_pass:指定后端服务器的地址,可以是IP地址或域名。proxy_set_header:设置代理请求的头信息,如Host、X-Real-IP和X-Forwarded-For等。这些设置可根据需要进行调整。
-
保存并关闭配置文件。
创建一个符号链接,将配置文件链接到sites-enabled文件夹中。可以使用ln -s命令来创建符号链接。
1 | ln -s /etc/nginx/sites-available/my-proxy.conf /etc/nginx/sites-enabled/ |
创建符号链接后,sites-enabled文件夹就会出现my-proxy.conf文件,如果sites-available文件夹中的proxy.conf的内容发生改变,sites-enabled就会同步发生改变。
- 确保新添加的配置文件没有语法错误,可以使用以下命令检查Nginx配置文件是否有效
1 | nginx -t |
- 如果配置文件有效,则重新加载Nginx配置,使更改生效
1 | nginx -s reload |





