Nginx 如何配置http server 、负载均衡(反向代理)

目录

  • [1. 关于 Nginx](#1. 关于 Nginx)
  • [2. 配置http server](#2. 配置http server)
  • [3. 配置负载均衡](#3. 配置负载均衡)

本文主要介绍 Nginx中如何配置 http server,负载均衡(反向代理)。

1. 关于 Nginx

Nginx是一个开源的、高性能的、稳定的、简单的、功能丰富的HTTP和反向代理服务器,也可以用作IMAP/POP3/SMTP代理服务器。它使用了异步事件驱动的架构,可以支持高并发连接。

Nginx的主要功能包括:

  • HTTP服务器:Nginx可以作为一个Web服务器使用,提供HTTP服务。它支持静态文件服务,SSL和TLS协议,虚拟主机等功能。
  • 反向代理和负载均衡:Nginx可以作为反向代理服务器,代理HTTP或非HTTP服务。同时,它还提供了负载均衡的功能,可以将请求分发到后端的多个服务器。
  • 邮件代理服务器:Nginx还可以作为IMAP/POP3/SMTP代理服务器。
  • TCP/UDP代理服务器:Nginx可以代理TCP和UDP服务。
    Nginx的设计目标是提供高性能、高并发、低内存使用的网络服务。它广泛应用于网站的服务端,是目前最流行的Web服务器之一。

与Nginx类似的软件主要包括以下几种:

  • Apache HTTP Server:这是最流行的Web服务器软件之一,功能强大,模块众多,可以通过配置满足各种需求。
  • Microsoft IIS:这是微软提供的Web服务器软件,与Windows系统集成度高,支持.NET等微软技术。
  • Lighttpd:这是一个轻量级的Web服务器软件,资源占用少,性能优秀,适合在资源有限的环境中使用。
  • Caddy:这是一个新型的Web服务器软件,配置简单,自动支持HTTPS。
  • Tomcat:这是Apache的一个开源项目,主要用来运行Java代码,常常被用作Web服务器和Java应用服务器。
  • Node.js:虽然主要是一个JavaScript运行环境,但由于其事件驱动和非阻塞I/O模型,也常常被用来编写Web服务器。

以上这些软件都可以作为Web服务器使用,但各自的特性和优势不同,需要根据实际需求选择合适的软件。

2. 配置http server

在Nginx中,配置HTTP服务器主要是通过编辑Nginx的配置文件,通常是nginx.conf。

以下是一个基本的HTTP服务器配置示例:

复制代码
http {
    server {
        listen 80;  # 监听80端口
        server_name example.com;  # 设置服务器名称

        location / {
            root /var/www/html;  # 设置网站根目录
            index index.html index.htm;  # 设置默认首页
        }

        # 处理错误页面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /var/www/html;
        }
    }
}

以上配置表示,Nginx会监听80端口,处理来自example.com的请求。

当请求的URL路径为/(即网站的根路径)时,Nginx会在/var/www/html目录下查找index.htmlindex.htm文件并返回。如果发生500、502、503或504错误,Nginx会返回/var/www/html/50x.html文件的内容。

以上只是一个基本的配置示例,实际上Nginx的配置可以非常复杂,可以配置反向代理、负载均衡、URL重写等高级功能。具体的配置方法需要根据实际需求进行。

接着,再看下,如何配置多个http server。

在Nginx中,可以在配置文件中定义多个server块来配置多个HTTP服务器。

每个server块代表一个虚拟主机,可以监听不同的端口,或者处理不同的域名。

以下是一个配置多个HTTP服务器的示例:

复制代码
http {
    # 第一个HTTP服务器
    server {
        listen 80;
        server_name example1.com;

        location / {
            root /var/www/example1;
            index index.html index.htm;
        }
    }

    # 第二个HTTP服务器
    server {
        listen 8080;
        server_name example2.com;

        location / {
            root /var/www/example2;
            index index.html index.htm;
        }
    }
}

以上配置表示,Nginx会监听80, 8080端口,处理来自example1.comexample2.com的请求。

当请求的URL路径为/时,如果请求的主机名为example1.com,Nginx会在/var/www/example1目录下查找index.htmlindex.htm文件并返回;

如果请求的主机名为example2.com,Nginx会在/var/www/example2目录下查找index.htmlindex.htm文件并返回。

3. 配置负载均衡

Nginx支持以下几种负载均衡方式:

  • 轮询(Round Robin):这是默认的负载均衡方式。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  • 权重(Weight):不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此Nginx允许指定每个服务器的处理能力。权重越高,分配的请求越多。
  • IP Hash:每个请求的IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
  • 最少连接(Least Connections):优先分配给当前连接数最少的服务器,适用于请求处理时间相差较大的情况。
  • URL Hash:按照访问URL的hash结果来分配请求,使得每个URL定向到同一个后端服务器,可以在后端服务器生成缓存的情况下提高系统效率。

以上负载均衡方式中,轮询、权重和IP Hash是Nginx内置支持的,最少连接和URL Hash需要使用Nginx的第三方模块,如ngx_http_upstream_least_conn_modulengx_http_upstream_hash_module

在Nginx中,配置负载均衡主要是通过upstream模块和proxy_pass指令实现的。以下是一个基本的负载均衡配置示例:

复制代码
http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;  # 将请求转发到upstream定义的后端服务器
        }
    }
}

以上配置表示,Nginx会监听80端口,处理来自example.com的请求。

当请求的URL路径为/(即网站的根路径)时,Nginx会将请求轮询地转发到backend1.example.combackend2.example.com

除了基本的轮询负载均衡,Nginx还支持其他几种负载均衡方式,例如权重、IP Hash等。

配置基于权重的负载均衡可以通过在upstream模块中为每个server指令添加weight参数来实现。

以下是一个基于权重的负载均衡配置示例:

复制代码
http {
    upstream backend {
        server backend1.example.com weight=3;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;  # 将请求转发到upstream定义的后端服务器
        }
    }
}

以上配置表示,Nginx会监听80端口,处理来自example.com的请求。

当请求的URL路径为/(即网站的根路径)时,Nginx会将请求转发到backend定义的后端服务器。这些服务器会按照权重的方式进行负载均衡,backend1.example.com的权重为3,backend2.example.com的权重为1(默认值),因此backend1.example.com会接收到更多的请求。

以上,本文主要介绍了 Nginx中配置 http server,负载均衡(反向代理)的基本方式。

相关推荐
_Evan_Yao6 小时前
端口80之外:一个Java小白和HTTP、DNS、FTP、SSH的“隐秘”交手
网络协议·http·ssh
高木木的博客12 小时前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
徐子元竟然被占了!!13 小时前
Nginx
运维·nginx
图图玩ai14 小时前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
CXH72815 小时前
nginx——https
运维·nginx·https
Lentou17 小时前
nginx反向代理
运维·nginx
遇见火星17 小时前
linux设置开启启动服务
linux·运维·服务器·nginx
悟道子HD18 小时前
计算机网络端口记忆指南
计算机网络·http·https·ssh·ftp·端口号·smtp
咸鱼翻身小阿橙18 小时前
QT P4
数据库·qt·nginx
上海合宙LuatOS20 小时前
LuatOS扩展库API——【httpplus】HTTP客户端
网络·物联网·网络协议·http·lua·luatos