Nginx详解:反向代理、负载均衡和高性能Web服务器

在这里插入图片描述

Nginx简介

Nginx 是一款高性能的开源Web服务器,同时也可以用作反向代理服务器和负载均衡器。本文将详细探讨Nginx的代理功能、负载均衡功能以及其它优点,提供配置示例、应用场景、注意事项以及完整的Nginx配置文件模板,以下是其主要优点:

  1. 轻量级:Nginx是一款轻量级的服务器,占用较少的系统资源,适用于嵌入式设备和资源有限的环境。
  2. 高性能:Nginx是一个事件驱动的Web服务器,具有出色的并发处理能力。它可以处理大量并发连接,而不会显著增加服务器负载。
  3. 反向代理:Nginx可以用作反向代理服务器,将客户端请求转发到后端服务器,隐藏后端服务器的信息。这对于提高安全性和负载均衡至关重要。
  4. 负载均衡:Nginx支持多种负载均衡算法,如轮询、加权轮询、IP哈希等,使您可以均衡分发流量到多个后端服务器,提高性能和可用性。
  5. 高可用性:通过将Nginx配置为负载均衡器,可以实现故障转移和容错,确保即使某些后端服务器出现问题,仍然能够提供连续的服务。
  6. 灵活配置: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配置文件的起点,以适应不同的代理和负载均衡需求。

注意事项:根据具体需求进行相应的调整,确保配置文件的正确性和安全性。
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霁晨晨晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值