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 地址关联的其他域提供服务。
先决条件
- NGINX 已安装。
客户端和 Web 服务器将
example.com和example.net域解析为 Web 服务器的 IP 地址。请注意,您必须手动将这些条目添加到 DNS 服务器中。
流程
编辑
/etc/nginx/nginx.conf文件:默认情况下,
/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 内容的路径。
-
将
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指令为此域定义单独的错误日志文件。
-
将
example.net域的类似的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; }
为这两个域创建根目录:
# mkdir -p /var/www/example.com/ # mkdir -p /var/www/example.net/对两个根目录设置
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命令。为这两个域创建日志目录:
# mkdir /var/log/nginx/example.com/ # mkdir /var/log/nginx/example.net/重启
nginx服务:# systemctl restart nginx
验证
在每个虚拟主机的文档 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-
使用浏览器并连接到
http://example.com。web 服务器显示/var/www/example.com/index.html文件中的示例内容。 -
使用浏览器并连接到
http://example.net。web 服务器显示/var/www/example.net/index.html文件中的示例内容。 -
使用浏览器并连接到
http://IP_address_of_the_server。Web 服务器显示/usr/share/nginx/html/index.html文件中的示例内容。