Linux下Nginx的安装,卸载和使用。实现反向代理配置。
引言
Nginx是一款高性能的开源Web服务器和反向代理服务器,广泛应用于现代应用程序的部署和负载均衡。它具有轻量级、高并发和低内存消耗的特点,能够处理大量的并发连接和高流量的网络请求。
本博文将介绍Linux下Nginx的安装和卸载方法,以美西VPS(Ubuntu 22.04)为例,并重点探讨如何配置Nginx作为反向代理服务器。
Nginx的安装与卸载
安装
更新软件包列表
sudo apt update
安装Nginx
sudo apt install nginx
验证安装
nginx -v
如果安装成功,将显示Nginx的版本信息。
卸载
卸载Nginx
sudo apt remove nginx
清理残留文件
sudo apt autoremove
反向代理的配置
反向代理是一种服务器架构模式,它充当位于客户端和目标服务器之间的中间层。当客户端发送请求时,反向代理服务器接收请求并将其转发到后端的目标服务器。然后,代理服务器将响应从目标服务器返回给客户端。通过这种方式,反向代理隐藏了后端服务器的真实身份和位置,为客户端提供了更高的安全性、负载均衡和缓存等功能。
配置Nginx作为反向代理服务器
下面是配置Nginx作为反向代理服务器的步骤:
方法一
Nginx的主要配置文件是 nginx.conf
,通常位于 /etc/nginx/
目录下。通过编辑此文件,我们可以进行各种配置。
步骤一:打开Nginx配置文件
sudo nano /etc/nginx/nginx.conf
nginx.conf文件内容如下:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
在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
块被注释掉了,因此在此示例中并不会实际使用邮件代理功能。
步骤二:添加server配置
在http
块内部,可以添加多个server
块来定义不同的虚拟主机。每个server
块可以针对特定的域名、IP地址或端口进行配置。
一般来说,server
块的添加位置可以在http
块中的任何位置,只要它在文件中的唯一位置即可。通常,建议将默认的server
块放在http
块的开头,以处理未匹配到其他虚拟主机的请求。然后,可以根据需要添加其他server
块来处理其他域名或IP地址的请求。
下面是一个示例,展示了http
块中的位置以及如何添加多个server
块:
http {
# Basic Settings
# SSL Settings
# Logging Settings
# Gzip Settings
server {
listen <监听端口>;
server_name <域名或IP地址>;
# 配置指令和内容
}
server {
listen 443 ssl;
server_name <域名或IP地址>;
ssl_certificate <SSL证书文件路径>;
ssl_certificate_key <SSL私钥文件路径>;
}
# 其他server块...
}
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
块的基本格式和一些常见的配置指令
server {
listen 80;
server_name a.example.com;
root /var/www/a.example.com;
index index.html;
location / {
# 处理根路径的请求
}
location /images {
# 处理/images路径的请求
}
# 其他配置指令和内容...
}
server {
listen 443 ssl;
server_name b.example.com;
ssl_certificate <SSL证书文件路径>;
ssl_certificate_key <SSL私钥文件路径>;
root /var/www/b.example.com;
index index.html;
location / {
# 处理根路径的请求
}
# 其他配置指令和内容...
}
在上述示例中,第一个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配置以使更改生效。
- 检查Nginx配置文件是否正确,若提示
successful
,则证明配置没问题。
sudo nginx -t
- 如果配置文件没有错误,重新加载Nginx配置
sudo systemctl reload nginx
或者,使用以下命令(适用于非systemd系统)
sudo service nginx reload
- 验证反向代理
访问代理服务器的域名或IP地址,验证是否能够成功访问到,能访问到证明nginx反代成功
方法二
server
块不写入到nginx.conf
文件中,而是在nginx
文件目录下的sites-available
文件夹中新建.conf
文件,并写入对应的server
块。
步骤一:创建新配置文件
- 在
sites-available
文件夹中创建一个新的配置文件,例如my-proxy.conf
,可以使用任何你喜欢的名称,但要确保文件扩展名是.conf
使用文本编辑器打开新创建的配置文件,并添加反向代理的配置信息。以下是一个示例:
server { 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
命令来创建符号链接。
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配置文件是否有效
nginx -t
- 如果配置文件有效,则重新加载Nginx配置,使更改生效
nginx -s reload