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.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.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; }
为这两个域创建根目录:
# 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
文件中的示例内容。