文章目录
Nginx简介
Nginx
是一款高性能的开源Web服务器,同时也可以用作反向代理服务器和负载均衡器。本文将详细探讨Nginx的代理功能、负载均衡功能以及其它优点,提供配置示例、应用场景、注意事项以及完整的Nginx配置文件模板,以下是其主要优点:
- 轻量级:Nginx是一款轻量级的服务器,占用较少的系统资源,适用于嵌入式设备和资源有限的环境。
- 高性能:Nginx是一个事件驱动的Web服务器,具有出色的并发处理能力。它可以处理大量并发连接,而不会显著增加服务器负载。
- 反向代理:Nginx可以用作反向代理服务器,将客户端请求转发到后端服务器,隐藏后端服务器的信息。这对于提高安全性和负载均衡至关重要。
- 负载均衡:Nginx支持多种负载均衡算法,如轮询、加权轮询、IP哈希等,使您可以均衡分发流量到多个后端服务器,提高性能和可用性。
- 高可用性:通过将Nginx配置为负载均衡器,可以实现故障转移和容错,确保即使某些后端服务器出现问题,仍然能够提供连续的服务。
- 灵活配置:Nginx的配置文件采用简洁的文本格式,易于理解和修改,使管理员能够轻松自定义服务器行为。
Nginx代理服务
1. 设置404页面导向地址
error_page 404 https://www.example.com; # 错误页
proxy_intercept_errors on;
解释:如果客户端请求的页面不存在(404错误),Nginx将用户重定向到指定的网址。proxy_intercept_errors on
表示当被代理服务器返回400或更高的状态码时,Nginx的error_page设置会生效。
应用场景:用于自定义404页面或将用户重定向到其他相关页面。
注意事项:确保指定的重定向地址是有效的。不建议重定向到外部不可信任的网站。
2. 限制请求方法
proxy_method get; # 支持客户端的请求方法。post/get;
解释:通过此设置,您可以指定允许的HTTP请求方法,例如GET或POST。这对于限制客户端请求方法很有用。
应用场景:可用于增强Web应用程序的安全性,只允许部分请求方法。
注意事项:请确保仅启用安全的HTTP请求方法,以防止潜在的攻击。
3. 设置支持的HTTP协议版本
proxy_http_version 1.1; # Nginx服务器提供代理服务的HTTP协议版本。
解释:Nginx支持多个HTTP协议版本。通过此设置,您可以指定Nginx用于代理服务的HTTP协议版本。
应用场景:可用于与后端服务器的HTTP版本匹配,提高性能和兼容性。
注意事项:确保所选的HTTP协议版本与被代理的后端服务器兼容。
4. 超时设置
proxy_connect_timeout 1;
proxy_read_timeout 1;
proxy_send_timeout 1;
proxy_ignore_client_abort on;
解释:这些设置允许您定义与被代理服务器建立连接、读取响应和发送请求的超时时间。proxy_ignore_client_abort on
表示当客户端断开连接时,Nginx会继续对被代理服务器的请求。
应用场景:确保及时处理与被代理服务器的连接超时和客户端断开的情况。
注意事项:根据您的网络环境和后端服务器的响应时间,调整超时时间以避免不必要的等待或中断。
5. 反向代理和请求路由
location /example/ {
proxy_pass http://backend-server;
proxy_set_header Host $host;
}
解释:Nginx可以用于反向代理,将请求路由到后端服务器。上述配置将所有以/example/
开头的请求代理到backend-server
,同时设置Host
标头以维护请求的合法性。
应用场景:用于将特定URL路由到不同的后端服务器或服务。
注意事项:确保代理目标地址和标头设置是正确的,以避免请求丢失或错误路由。
Nginx负载均衡
1. 热备
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; # 热备
}
解释:热备配置允许您设置一台服务器为热备服务器,只有在其他非热备服务器不可用时,才会向其发送请求。
应用场景:确保在其他服务器故障时提供连续的服务。
注意事项:仅在需要备份服务器时使用此选项,以减轻其负载。
2. 轮询
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
}
解释:轮询是Nginx的默认负载均衡算法,它按顺序分发请求给不同的服务器。
应用场景:用于平均分发请求,适用于后端服务器性能相近的情况。
注意事项:确保后端服务器性能相近,避免负载不均衡。
3. 加权轮询
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
解释:加权轮询允许您为每台服务器分配不同的权重,以更精细地分发请求,权重越大请求越多。
应用场景:用于服务器性能不均等的情况,希望根据性能分配负载。
注意事项:确保为每个服务器分配合理的权重,以反映其性能。
4. IP哈希
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}
解释:Nginx将相同客户端IP的请求发送到相同的后端服务器,以保持会话一致性。
应用场景:适用于需要会话粘性的应用,如在线购物车或登录状态。
注意事项:确保客户端IP不会经过NAT或代理,以确保正确的会话粘性。
Nginx常见命令
以下是一些常见的Nginx命令,以及它们的用途:
1. 启动Nginx服务
./nginx
2. 查看Nginx版本号
nginx -v
或
nginx -V
3. 查看Nginx进程
ps aux | grep nginx
4. 检查Nginx配置文件是否正确
nginx -t
5. 指定检测特定Nginx配置文件
nginx -t -c /etc/nginx/nginx.conf
6. 指定Nginx配置文件启动Nginx服务器
nginx -c /etc/nginx/nginx.conf
7. 强行停止Nginx服务器
nginx -s stop
8. 优雅停止Nginx服务器
nginx -s quit
9. 重新加载Nginx配置文件
nginx -s reload
10. 显示Nginx帮助信息
nginx -h
Nginx配置文件模板
以下是Nginx的通用配置文件模板,可用作参考:
user root root;
worker_processes 2;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
# tcp_nopush on;
keepalive_timeout 65;
# gzip压缩功能设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
# http_proxy 设置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
# 设定负载均衡后台服务器列表
upstream backend {
#ip_hash;
server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
}
# 很重要的虚拟主机配置
server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp;
charset utf-8;
access_log logs/host.access.log main;
#对 / 所有做负载均衡+反向代理
location / {
root /apps/oaapp;
index index.jsp index.html index.htm;
proxy_pass http://backend;
proxy_redirect off;
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
#静态文件,nginx自己处理,不去backend请求tomcat
location ~* /download/ {
root /apps/oa/fs;
}
location ~ .*/.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /apps/oaapp;
expires 7d;
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.10.0/24;
deny all;
}
location ~ ^/(WEB-INF)/ {
deny all;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
## 其它虚拟主机,server 指令开始
}
解释:此模板包含了Nginx的常见配置项,包括用户、工作进程、日志、事件处理和HTTP模块配置。您可以根据需求进行修改。
应用场景:用作Nginx配置文件的起点,以适应不同的代理和负载均衡需求。
注意事项:根据具体需求进行相应的调整,确保配置文件的正确性和安全性。