前言

上篇博文中直接在主配置文件Nginx.conf中编辑server块来实现配置不同的虚拟主机。在Nginx中也可使用include来引入其他配置文件到主配置文件中。由于server块经常需要更改,所有这里将不同虚拟主机的server块独立出来放入conf.d目录中,并在主配置文件中引用来达到配置不同虚拟主机的目的更方便后期维护。

基于不同IP的虚拟主机的配置

基于不同IP的虚拟主机配置步骤如下:

  1. 为网卡绑定多个IP地址
ip addr add 10.12.1.98/23 dev enp1s
#此命令为临时绑定重启服务或者重启计算机后就会失效,如果需要永久生效需要修改ifcfg-enp1s0配置文件。

1695355058072.png

ip addr show enp1s0
#查看IP是否绑定成功

1695361310573.png

  1. 准备测试测试页面
    创建三个虚拟主机对应的站点目录,并将三个不同的html页面放于其中。

1695363964453.png

  1. 创建对应虚拟主机的配置文件

    我们需要3个虚拟主机,为了方便日后维护,本步需要创建3个配置文件,每个配置文件分别对应一个虚拟主机。

  • 98cfg.conf
    server {
        #监听端口号IPv4
        listen 10.12.1.98:80;
        server_name _;
        location / {
        #站点根目录(网站程序存放目录)
        root         /var/www/html/98;
        index      index.html;
        }
    }
  • 99cfg.conf
    server {
        #监听端口号IPv4
        listen 10.12.1.99:80;
        server_name _;
        location / {
        #站点根目录(网站程序存放目录)
        root         /var/www/html/99;
        index      index.html;
        }
    }
  • 100cfg.conf
      server {
        #监听端口号IPv4
        listen 10.12.1.100:80;
        server_name _;
        location / {
        #站点根目录(网站程序存放目录)
        root         /var/www/html/100;
        index      index.html;
        }
    }
  1. 修改主配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;


include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;

    server {

        include /etc/nginx/default.d/*.conf;
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
   nginx -t
   #修改配置文件后必须检查语法,显示语法OK则表示正常
   nginx -s reload
   #重新加载配置文件
   systemctl restart nginx
   #重启nginx

1695367725558.png

  1. 访问测试
  • 访问10.12.1.98

1695369831591.png

  • 访问10.12.1.99

1695369842148.png

  • 访问10.12.1.100

1695369856446.png

遇到的问题及解决办法

  1. 访问任意虚拟主机出现403报错

1695370034957.png

首先先查看nginx的错误日志

tail /var/log/nginx/error.log

1695370192075.png

从错误日志中可以发现报错为 Permission denied,说明客户端请求没有权限,出现这种情况一般是因为防火墙或者selinux配置错误

先使用 systemctl status firewalld.service查看防火墙状态,发现防火墙状态为关闭状态。

1695370406212.png

然后再使用cat /etc/selinux/config查看selinux是否是 permissive模式,可见这里selinux为enforcing模式。

1695370544986.png

使用setenforce 0将selinux临时设置为permissive模式

再尝试访问任意一个虚拟主机,发现已经可以访问。

1695370711923.png

如果还未解决403问题,可以按照如下步骤继续排查。
1、排查配置文件是否中的资源路径是否正确,资源目录拼写是否正确。
2、没有资源目录的权限,排除nginx是否有访问资源目录的权限。
3、排查主配置文件是中nginx的工作用户是否与启动用户相同,如不一致将工作用户设置为启动用户。