什么是虚拟主机?
一个nginx提供多个网站的服务。
虚拟机是虚拟化技术,虚拟主机不是虚拟化技术。每个虚拟主机之间是独立的,互不影响。
它的意思是,比如现在在一台物理服务器安装了nginx,但是物理服务器(或虚拟机),配置比较高,但是访问量不大,在这种情况下,如果还有项目需要web服务器,就没必要在额外的整一台虚拟机或者物理服务器了,就用这一个nginx服务,可以同时提供多个网站的访问,还可以提供多个域名,说白了正常情况下,一个nginx提供一个网站的服务。现在一个nginx提供多个网站的服务。这种情况下每一个网站都是虚拟主机,客户那里认为我是独立的主机,实际上提供服务的是虚拟的主机,它不是一个完整的nginx,它只是nginx里边配置的一部分,配置的一个网站,apache和nginx都可以这么做。
比如阿里,腾讯都卖虚拟主机,他们卖的虚拟主机无非就是nginx配置文件配置出来的一个目录,这个目录可以让你放网站,你不能做其他的操控,只能把你的网站,放在它卖给你的目录下。这个目录一般会有大小限制,按照大小,配置不同要不同的收费。
虚拟主机的分类,有什么区别?
1、基于域名的虚拟主机 【用的最多】(server_name来区分虚拟主机——应用:外部网站)
2、基于ip的虚拟主机, (一块主机绑定多个ip地址)
3、基于端口的虚拟主机 (端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台)
它主要用什么东西去判断这是不同的虚拟主机?
域名、ip、端口。
基于域名的虚拟主机
在http默认有一个server,这就是一个虚拟主机,给它再加一个server,就是另外一个虚拟主机。这两个虚拟主机可以放在不同的网站,它们不同的地方在于,域名不一样,发布网站的目录不一样。其他的随意,看想不想做限速,想访问不同的网站,根据域名访问。
用rpm安装的nginx。默认情况下什么都不用配,直接就可以把服务启动起来。
[root@bogon ~]# systemctl status nginx 现在服务属于启动状态
在本地访问一下
[root@bogon ~]#curl 127.1
找它的配置文件,配置文件都会在/etc/nginx/下面,里面有个nginx.conf,这是它的主配置文件,
[root@bogon nginx]# vim /etc/nginx/nginx.conf 进入它的主配置文件。

进入之后,上面的东西先别动,动的是http里面的server,现在里面没有server,因为rpm安装的nginx稍微做了点优化,它把主配置文件分开到其他目录里了。
配置文件最下面,有个include,它里面所有的内容相当于http的一部分,相当于主配置文件的一部分,它是用include包含进来了,去修改*.conf文件就相当于修改http文件。
找etc/conf.d/目录
conf.d 这个也是存放的配置文件,有个默认的default.conf
[root@bogon conf.d]# vim default.conf
刚才主配置文件没server,它把server放到这里了,每一个server就是一台独立的虚拟主机,里面的是默认的,再去复制一个。复制之前,先把默认server的域名改了,改成web1.server.com

listen端口是80
server_name 域名是localhost
access_log 默认访问日志的位置
location 是用来做定位的,定位我的网站在哪个目录下
root 指的是网站所在目录,叫根目录,在配置文件写的什么,网站就得放在那,这个目录可以自己随意定义。
index 指主页的名字叫什么 index.html index.html 这两个是或的意思
error_page 错误页面,本身是注释,它也可以改,一般用默认就行
再做一个虚拟主机,要把default.conf里的server全部复制到第一个配置文件的下面。
全选:按esc后,然后ggvG或者ggVG
全部复制:yy或者按esc后,然后ggyG

复制之后按G 光标移动到最后一行再按回车多几个空行分隔,最后按p粘贴。

复制完毕之后,进行修改。

域名修改为web2.server.com。
存储网站的目录改为web2。但这个目录不存在,防止忘了它,顺手开个终端,创建web2目录
[root@localhost conf.d]# mkdir /usr/share/nginx/web2
:wq!保存
cd到web2目录下,创建一个主页
<html>
<meta charset="utf-8">
<title>
自建页面
</title>
<h1>
<center>我是页面标题</center>
</h1>
<hr>
<body background=>
<center>"我是页面内容"</center>
</body>
</html>

[root@localhost web2]# systemctl stop firewalld 关闭防火墙
[root@localhost web2]# setenforce 0 关闭selinux
[root@localhost web2]# systemctl restart nginx 重启服务
重启服务就可以拿域名访问了,作为客户端应该有网站的解析,没有解析访问不了。可以拿另外一台机器当客户端。
vim /etc/hosts

都是同一个IP地址,端口也一样就是域名不一样,先确保能ping通 ping 192.168.22.142
然后就可以在centos里拿浏览器访问了
测试
web1.server.com
web2.server.com


基于ip的虚拟主机
同样也是复制server,域名是同一个域名,在80端口前面加了不同的ip。就这里和基于域名虚拟主机不一样,访问的时候访问ip。这种适用于内网,不适用于外网。(用的比较少)

基于端口的虚拟主机
域名还是同样的域名,就是端口变了,访问网站的时候加个端口。(这个用的也不多)



修改完配置文件之后,重启nginx
[root@localhost conf.d]# systemctl restart nginx
去测试

测试
浏览器输入:http://web1.server.com
浏览器输入:http://web.server.com:8080