Day 3: Nginx模块
1.学习Nginx的模块系统,如HTTP、TCP、Mail等 。
1.1http模块
HTTP模块是Nginx最常用的模块,它提供了HTTP协议的支持,包括HTTP请求的处理、转发、缓存、重定向、认证等。
HTTP模块中一些重要的指令包括:
server
:定义一个HTTP服务的配置块,可以设置监听端口、域名、反向代理等。location
:定义一个URL的匹配规则,用于配置请求的处理方式,可以设置反向代理、缓存、重定向等。proxy_pass
:设置反向代理的目标地址。root
:设置Web根目录。error_page
:设置错误页面的返回码和返回内容。if
:条件语句,用于根据请求头、请求参数、IP地址等条件来控制请求的处理方式。
HTTP模块中还提供了一些常用的变量,例如:
$uri
:请求的URI。$args
:请求的参数。$http_x_forwarded_for
:代理服务器的IP地址。
1.2TCP模块
TCP模块提供了TCP/UDP协议的支持,可以用于实现代理、负载均衡、限流、流量控制等。TCP模块中包括的指令和变量相对较少,但是提供了一些重要的功能。
TCP模块中一些重要的指令包括:
stream
:定义一个TCP服务的配置块,可以设置监听端口、代理服务器等。server
:定义一个TCP服务的配置块,可以设置监听端口、代理服务器等。proxy_pass
:设置代理服务器的目标地址。
TCP模块中还提供了一些常用的变量,例如:
$remote_addr
:客户端的IP地址。$proxy_protocol_addr
:代理服务器的IP地址。
1.3Mail模块
-
Nginx的Mail模块是Nginx的一个模块,可以用于邮件服务的代理和负载均衡,支持POP3, IMAP, SMTP, 和LMTP等协议。Mail模块也可以像HTTP模块一样配置反向代理和负载均衡,使用upstream模块配置Mail服务器的负载均衡。
Mail模块的指令和HTTP模块有所不同,主要有以下指令:
mail
: 定义Mail协议配置块
server
: 定义Mail服务器
listen
: 监听特定的地址和端口号
protocol
: 定义Mail协议类型
auth_http
: 使用HTTP协议验证用户名和密码
starttls
: 启用STARTTLS协议
ssl_preread
: 检查SSL握手,可以将邮件请求路由到正确的SSL/TLS后端服务器Mail模块还支持使用SMTP代理和SSL/TLS。可以使用SMTP代理将发件人的SMTP请求代理到邮件服务器,也可以使用SSL/TLS保护邮件服务器与邮件客户端之间的通信。
2.熟悉各种模块的用法和配置方法。
2.1http使用练习
使用nginx的HTTP模块和反向代理功能,实现一个代理服务器负载均衡访问两台web服务器的静态网站具体步鄹如下:
web服务器1:192.168.141.135
web服务器2:192.168.141.136
代理机:192.168.141.128
1.安装nginx(略)
2.配置nginx文件(代理机)
vim /etc/nginx/conf.d/web.conf
...
upstream web_servers {
server 192.168.141.135:80;
server 192.168.141.136:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://web_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($uri !~* "\.(gif|jpg|jpeg|png|css|js|ico)$") {
expires 1d;
}
}
}
...
配置完成后,当用户访问http://example.com
时,Nginx会将请求转发给192.168.141.136或192.168.141.135中的一台Web服务器,并将其返回给用户。由于使用了反向代理和负载均衡的功能,即使其中一台Web服务器故障,仍然可以保证网站的正常访问。
代码解析
upstream块定义了一组Web服务器的列表,即192.168.141.135和192.168.141.136,它们将被用作代理服务器的后端。
server块定义了监听80端口的HTTP服务器
location块配置了请求的URL路径以及如何代理请求
proxy_pass指令将请求转发给先前定义的upstream组
proxy_set_header指令用于设置HTTP请求头信息,包括原始主机名和真实IP地址,以及X-Forwarded-For头信息,以便Web服务器能够获取到实际客户端的IP地址。
if指令用于检查URI路径是否为静态文件类型,如果不是,则使用expires指令为响应设置一个缓存时间,从而提高性能
2.2TCP模块使用练习
1.配置文件(代理机)
stream {
upstream backend {
server 192.168.141.135:8080;
server 192.168.141.136:8080;
}
server {
listen 80;
proxy_pass backend;
}
}
2.配置文件(web服务器)
修改
listen 8080;
3.看起来和http使用差不多,那tcp有什么作用呢
首先,TCP模块主要用于处理TCP协议的流量,可以实现TCP代理、负载均衡、流量控制等功能。它可以工作在传输层,能够直接处理TCP连接,比HTTP模块更为底层。因此TCP模块可以更高效地处理TCP连接,具有更高的吞吐量和更低的延迟。而HTTP模块需要对HTTP协议进行解析和处理,因此性能会稍差一些。也就是这样使用的时候可以更快
其次,在配置方面,TCP模块需要配置的参数相对较少,比如upstream服务器列表、负载均衡策略、代理缓存等。而HTTP模块需要配置的参数较多,包括server、location、rewrite、access等指令,用于控制请求的转发、缓存、访问控制等。配置起来更简单