Nginx反向代理配置

📘 教程 · 2023-05-19
Nginx反向代理配置

Linux下Nginx的安装,卸载和使用。实现反向代理配置。

引言

Nginx是一款高性能的开源Web服务器和反向代理服务器,广泛应用于现代应用程序的部署和负载均衡。它具有轻量级、高并发和低内存消耗的特点,能够处理大量的并发连接和高流量的网络请求。

本博文将介绍Linux下Nginx的安装和卸载方法,以美西VPS(Ubuntu 22.04)为例,并重点探讨如何配置Nginx作为反向代理服务器。

Nginx的安装与卸载

安装

  1. 更新软件包列表

    sudo apt update
  2. 安装Nginx

    sudo apt install nginx
  3. 验证安装

    nginx -v

    如果安装成功,将显示Nginx的版本信息。

卸载

  1. 卸载Nginx

    sudo apt remove nginx
  2. 清理残留文件

    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的配置文件中,eventshttpmail是三个不同的块,用于配置不同的功能和模块。下面是对这些块的解释:

  1. events

events块用于配置Nginx的事件处理机制。它定义了与客户端的连接和网络事件相关的参数,如并发连接数、连接超时等。在这个块中,您可以设置以下参数:

  • worker_connections:指定每个worker进程可同时处理的连接数。
  • multi_accept:允许一个worker进程同时接受多个连接。
  • 其他与事件相关的参数。

例如,在示例配置中,events块中设置了worker_connections参数为768,表示每个worker进程可以同时处理768个连接。

  1. http

http块是Nginx配置文件中最常见的块,用于配置HTTP服务器和相关功能。它包含了与HTTP请求、响应和代理等相关的配置指令。在这个块中,您可以设置以下内容:

  • 基本设置:如sendfiletcp_nopushtypes_hash_max_size等。
  • SSL/TLS设置:如ssl_protocolsssl_prefer_server_ciphers等。
  • 日志设置:如access_logerror_log等。
  • Gzip设置:如启用或禁用gzip压缩。
  • 虚拟主机配置:使用server块来定义不同的虚拟主机。

在示例配置中,http块包含了基本设置、SSL设置、日志设置和Gzip设置,并通过include指令包含了额外的配置文件和虚拟主机配置。

  1. mail

mail块是用于配置Nginx作为邮件代理服务器的功能。它定义了与POP3和IMAP协议相关的配置指令。在这个块中,您可以设置代理服务器的监听端口和协议,以及与认证和代理相关的配置。

在示例配置中,mail块被注释掉了,因此在此示例中并不会实际使用邮件代理功能。

请注意,`http`块是最常见和常用的块,用于配置Nginx作为HTTP服务器和反向代理服务器。`events`块和`mail`块是可选的,根据您的需求和使用场景进行配置。

步骤二:添加server配置

http块内部,可以添加多个server块来定义不同的虚拟主机。每个server块可以针对特定的域名、IP地址或端口进行配置。

一般来说,server块的添加位置可以在http块中的任何位置,只要它在文件中的唯一位置即可。通常,建议将默认的server块放在http块的开头,以处理未匹配到其他虚拟主机的请求。然后,可以根据需要添加其他server块来处理其他域名或IP地址的请求。

因此,如果要在`nginx.conf`文件中加入新的server块,建议加入到`http`块的最后面,即`include`部分的后面,因为`include`部分调用了**默认**的`server`块。

下面是一个示例,展示了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块的主要组成部分包括:

  1. listen指令:

    listen指令用于指定Nginx服务器监听的端口。可以是一个具体的端口号(如80),也可以是IP地址加端口号(如192.168.0.1:8080)。还可以使用特殊的监听地址,如default_server用于指定默认的虚拟主机。

  2. server_name指令:

    server_name指令用于指定虚拟主机所对应的域名或IP地址。可以使用具体的域名(如example.com)或使用通配符(如*.example.com)来匹配多个域名。

  3. 配置指令和内容:

    server块中,可以设置各种配置指令和内容来定义特定虚拟主机的行为。这些指令可以包括但不限于:

    • root:指定虚拟主机的根目录。
    • index:指定默认的索引文件。
    • location:用于定义请求路径的处理规则。
    • SSL/TLS配置:如ssl_certificatessl_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配置以使更改生效。

  1. 检查Nginx配置文件是否正确,若提示successful,则证明配置没问题。
sudo nginx -t
  1. 如果配置文件没有错误,重新加载Nginx配置
sudo systemctl reload nginx

或者,使用以下命令(适用于非systemd系统)

sudo service nginx reload
  1. 验证反向代理

访问代理服务器的域名或IP地址,验证是否能够成功访问到,能访问到证明nginx反代成功


方法二

server块不写入到nginx.conf文件中,而是在nginx文件目录下的sites-available文件夹中新建.conf文件,并写入对应的server块。

步骤一:创建新配置文件

  1. sites-available文件夹中创建一个新的配置文件,例如my-proxy.conf,可以使用任何你喜欢的名称,但要确保文件扩展名是.conf
  2. 使用文本编辑器打开新创建的配置文件,并添加反向代理的配置信息。以下是一个示例:

    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等。这些设置可根据需要进行调整。
  3. 保存并关闭配置文件。

步骤二:创建符号链接

创建一个符号链接,将配置文件链接到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就会同步发生改变。

步骤三:检验并重新加载

  1. 确保新添加的配置文件没有语法错误,可以使用以下命令检查Nginx配置文件是否有效
nginx -t
  1. 如果配置文件有效,则重新加载Nginx配置,使更改生效
nginx -s reload
Nginx Linux
Theme Jasmine by Kent Liao