Nginx (1):nginx虚拟主机配置

不同的nginx安装方式对应不同的配置文件目录,可以采用apt-get安装,也可以使用nginx的压缩包安装,我采用的前者,因为简单。具体方法,可以参考:https://blog.csdn.net/qq_41985134/article/details/117991218

虚拟主机原理:外界只有通过域名才能访问主机,一个主机只负责一个域名的请求会造成资源浪费,一个域名对应一个ip地址,那么能不能一个ip地址对应多个域名,nginx服务器端判断你访问哪个域名,指向不同的站点目录,把相应的资源拿出来给你就好了。
虚拟主机,就是把一台物理服务器划分成多个 “虚拟” 的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多个域名不同的网站。
Nginx 下,一个 server 标签就是一个虚拟主机。nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个server节点即可。
例如:www.meituan.com 切换城市,可以看到不同的城市地址不一样(二级域名)
比如一个公司有多个二级域名,没有必要为每个二级域名都提供一台 Nginx 服务器,就可以使用虚拟主机技术,在一台 Nginx 服务器上,模拟多个虚拟服务器。

  • 目录介绍:
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件
/var/log/nginx:存放日志
  • 虚拟主机配置文件
从nginx.conf中可以看到:
##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
刚安装的nginx在这两个目录中只有一个文件,default,位于/etc/nginx/sites-enabled/,看来,虚拟主机的配置文件在sites-enabled里面。

基于端口的虚拟主机配置

  • 操作default
注释里很贴心的给我们样例了,仿照着修改一下:
server {
	listen 82; # 监听82端口
	listen [::]:82;
	root /var/www/web/index; #意思是访问82端口的请求定位到该目录下
	index index.html;  # 这个页面文件提前放在/var/www/web/index中
	server_name indexdemo;
	location / {
		try_files $uri $uri/ =404;
	}
}
server {
	listen 83;
	listen [::]:83;
	root /var/www/web/login;
        index login.html;
	server_name logindemo;
	location / {
	    try_files $uri $uri/ =404;
	}
}

修改完配置文件一定记得重新读取并解析才能生效:

nginx -s reload

访问:http://192.168.xxx.xxx:83/试一下
在这里插入图片描述

  • 当然,用域名也可以访问:www.xxx.com:82

基于域名的虚拟主机配置

  • 直接上代码了
# 为了验证基于域名的虚拟主机,那么肯定是访问多个域名,访问同一端口得到不同的反馈,
# 好像是有多台主机,但其实只有一台。
server {
	listen 81;
	listen [::]:81;
	root /var/www/web/index;
	index index.html;
	server_name www.xxx.com;
	location / {
		
		try_files $uri $uri/ =404;
	}
}
server {
	listen 81;
	listen [::]:81;
	root /var/www/web/login;
     index login.html;
	server_name www.yyy.com;
	location / {
	    try_files $uri $uri/ =404;
	}
}

不同的域名访问同样的端口,得到不同的内容,目的达成。

servername匹配规则

  • 上面讲的基于域名的虚拟主机是想不同的域名访问不同的资源,可以通过设置多个server来显示。那如果是不同的域名访问同样的资源呢?那就不用设置多个server了,太傻了,直接一个server写多个域名就好了。
  • 那给一个域名,怎么匹配对应的server资源呢?遵循以下规则:

先精准,后头通配符,再尾通配符,最后正则

server {
	listen 81;
	listen [::]:81;
	root /var/www/web/index;
	index index.html;
	server_name www.xxx.xyz www.xxx.store;
	location / {
		
		try_files $uri $uri/ =404;
	}
}
server {
	listen 81;
	listen [::]:81;
	root /var/www/web/login;
     index login.html;
	server_name *.xxx.store www.xxx.* vod.xxx.*;
	location / {
	    try_files $uri $uri/ =404;
	}
}

尝试www.xxx.xyz,因为是先精准匹配,所以去index.html
尝试vod.xxx.store,因为没有精准匹配的,所以匹配到前通配符*.xxx.store,去到login.html
尝试www.xxx.net,因为前两种情况不存在,所以尾通配符匹配,去到login.html。
vod.xxx.org同理。

可能会有疑问,vod.xxx.store怎么设置解析?答案是需要去买域名的网站的域名管理中去增加这条域名解析。那xxx.net?xxx.org呢?这些当然是域名了,需要单独买,但是咱们不买也可以实现,那就是在hosts文件里进行域名解析,模拟一下外网的操作。如下

192.168.xxx.xxx www.xxx.neg
192.168.xxx.xxx vod.xxx.org

简单来说,这两行的意思就是,将www.xxx.neg、vod.xxx.org的外网域名映射到192.168.xxx.xxx的内网,然后交给第二个server去解析。
操作系统规定,在进行DNS请求以前,先检查自己的Hosts文件中是否有这个域名和IP的映射关系。如果有,则直接访问这个IP地址指定的网络位置,如果没有,再向已知的DNS服务器提出域名解析请求。也就是说Hosts的IP解析优先级比DNS要高。(这里的例子就是咱们没钱买不到这两个域名,那么就不让dns解析了,直接hosts解析模拟,如果咱们有这个域名,经过dns解析之后得到的ip就是192.168.xxx.xxx但是咱没有域名,那就直接用hosts告诉主机,见到www.xxx.neg、vod.xxx.org,就直接访问192.168.xxx.xxx,这个ip就是它们的真实ip地址。虚拟机拿到请求就执行nginx的功能,分别给资源就好了)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlZ1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值