2.2. 将 NGINX 配置为一个为不同域提供不同内容的 web 服务器

默认情况下,NGINX 作为 web 服务器,为与服务器的 IP 地址关联的所有域名提供相同的内容。此流程解释了如何配置 NGINX 来实现一下情况:

  • 使用 /var/www/example.com/ 目录中的内容提供对 example.com 域的请求
  • 使用/var/www/example.net/目录中的内容为example.net域提供请求
  • 使用/usr/share/nginx/html/目录中的内容为所有其他请求提供服务,例如,向服务器的IP地址或与服务器的IP地址相关联的其他域发送请求

先决条件

  • NGINX 已安装
  • 客户端和 Web 服务器将 example.comexample.net 域解析为 Web 服务器的 IP 地址。

    请注意,您必须手动将这些条目添加到 DNS 服务器中。

流程

  1. 编辑/etc/nginx/nginx.conf文件:

    1. 默认情况下,/etc/nginx/nginx.conf文件已包含catch-all配置。如果您已从配置中删除了这部分,请将以下server块重新添加到/etc/nginx/nginx.conf文件中的http块中:

      server {
          listen       80 default_server;
          listen       [::]:80 default_server;
          server_name  _;
          root         /usr/share/nginx/html;
      }

      这些设置配置以下内容:

      • listen指令定义服务监听的 IP 地址和端口。在本例中,NGINX 监听所有 IPv4 和 IPv6 地址的80端口 。default_server参数表示,NGINX 使用此server块作为匹配 IP 地址和端口的请求的默认值。
      • server_name参数定义此server块所负责的主机名。将server_name设置为_,会将NGINX配置为接受这个server块的任何主机名。
      • root指令设置此server块的 Web 内容的路径。
    2. 将类似于example.com域的server块添加到 http块中:

      server {
          server_name  example.com;
          root         /var/www/example.com/;
          access_log   /var/log/nginx/example.com/access.log;
          error_log    /var/log/nginx/example.com/error.log;
      }
      • access_log指令为此域定义一个单独的访问日志文件。
      • error_log指令为此域定义单独的错误日志文件。
    3. 将类似于 example.com 域的一个 server 块添加到 http 块中:

      server {
          server_name  example.net;
          root         /var/www/example.net/;
          access_log   /var/log/nginx/example.net/access.log;
          error_log    /var/log/nginx/example.net/error.log;
      }
  2. 为这两个域创建根目录:

    # mkdir -p /var/www/example.com/
    # mkdir -p /var/www/example.net/
  3. 在两个根目录中设置httpd_sys_content_t上下文:

    # semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
    # restorecon -Rv /var/www/example.com/
    # semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?"
    # restorecon -Rv /var/www/example.net/

    这些命令在/var/www/example.com//var/www/example.net/目录中设置httpd_sys_content_t上下文。

    请注意,您必须安装 policycoreutils-python-utils软件包才能运行restorecon命令。

  4. 为这两个域创建日志目录:

    # mkdir /var/log/nginx/example.com/
    # mkdir /var/log/nginx/example.net/
  5. 重启nginx服务:

    # systemctl restart nginx

验证步骤

  1. 在每个虚拟主机的文档 root 中创建不同的示例文件:

    # echo "Content for example.com" > /var/www/example.com/index.html
    # echo "Content for example.net" > /var/www/example.net/index.html
    # echo "Catch All content" > /usr/share/nginx/html/index.html
  2. 使用浏览器并连接到 http://example.comWeb 服务器显示/var/www/example.com/index.html文件中的示例内容。
  3. 使用浏览器并连接到 http://example.netWeb 服务器显示/var/www/example.net/index.html文件中的示例内容。
  4. 使用浏览器连接到http://IP_address_of_the_server。Web 服务器显示/usr/share/nginx/html/index.html文件中的示例内容。