本文是在ubuntu(20),英文原文是在ubuntu16 下实现完成的。就是配置2个虚拟主机,访问不同域名不同的WEB主目录。
2个域名分别是example.com, test.com,这2个域名你不必有,只是测试用。
前提条件
本文内容不包含nginx 的安装,可以参考:Nginx 在Ubuntu 上的安装,测试
其实安装就是:
sudo apt update
sudo apt install nginx
本文需要你有一个非root 的用户,但属于sudo组,如果没有,在根用户下如下此操作:
adduser sammy
usermod -aG sudo sammy
建立新的Web 根目录
缺省情况下,Ubuntu 的Web 根目录是/var/www/html,这是在安装了nginx 后的情况。
现在建立2个域名的Web 根目录,分别是example.com, test.com。
-p 的意思是建立必要的父目录。
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html
改变目录的所有者和组
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/test.com/html
改变目录权限:
sudo chmod -R 755 /var/www
建立2个样本网页
给第一个域名建立index.html
nano /var/www/example.com/html/index.html
内容如下:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
内容很简单就是显示 The example.com server block is working。
给第二个域名建立index.html
nano /var/www/test.com/html/index.html
内容如下:
<html>
<head>
<title>Welcome to Test.com!</title>
</head>
<body>
<h1>Success! The test.com server block is working!</h1>
</body>
</html>
我们的目标就是访问不同的域名,显示不同的网页。
服务器块配置
给第一个域名服务器块配置:
sudo nano /etc/nginx/sites-available/example.com
内容为:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
给第二个域名服务器块配置:
sudo nano /etc/nginx/sites-available/test.com
内容为:
server {
listen 80;
listen [::]:80;
root /var/www/test.com/html;
index index.html index.htm index.nginx-debian.html;
server_name test.com www.test.com;
location / {
try_files $uri $uri/ =404;
}
}
使能配置并重启动nginx
/etc/nginx/sites-available/ 下的配置文件并不会参与配置,必须链接到/etc/nginx/sites-enable/目录下
使能的操作如下:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
为了避免可能由于添加其他服务器名称而引起的哈希存储桶内存问题,我们在/etc/nginx/nginx.conf文件中调整单个值。 打开文件:
sudo nano /etc/nginx/nginx.conf
在文件里找到server_names_hash_bucket_size项,取消前面的注释。
http {
. . .
server_names_hash_bucket_size 64;
. . .
}
保存并关闭文件。
下面测试整个配置是否语法正确。
sudo nginx -t
其实也可以:
sudo nginx -T
大写T检查语法并显示配置内容。显示主配置文件内容,2个服务器配置块内容,还有配置文件中include 的内容。
配置报错你可以看看/etc/nginx/sites-enbale/目录下的内容,不是必要的就要删除,也许是他引起的错误。
如果检查无误,不报错,我们就重启动nginx:
sudo systemctl restart nginx
为了测试修改本地hosts文件
这里必须是你访问主机的浏览器客户机地址。
域名解析首先是使用本地hosts文件,然后再是互联网解析。这个文件的地址是linux 下为/etc/hosts,windows 下则为C:\Windows\System32\drivers\etc 。
可以查看英文链接:https://www.howtogeek.com/howto/27350/beginner-geek-how-to-edit-your-hosts-file/或者我的博客 DNS 域名解析协议 和本地缓冲
文件内容加上我们2个域名的解析:
127.0.0.1 localhost
. . .
203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com
这里特别注意:203.0.113.5 是样本地址,必须改上你主机的ip地址,否则访问就不对。
测试结果
在浏览器里输入:example.com
应该显示如下:
在浏览器里输入:test.com
应该显示如下:
这个测试成功了,我们的实验就完成了。实际的域名不用hosts解析,但你需要购买。你就可以设置多个虚拟主机在一个linux主机上了。