• 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:存放日志
    
    • 1
    • 2
    • 3
    • 4
    • 虚拟主机配置文件
    从nginx.conf中可以看到:
    ##
    # Virtual Host Configs
    ##
    
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    刚安装的nginx在这两个目录中只有一个文件,default,位于/etc/nginx/sites-enabled/,看来,虚拟主机的配置文件在sites-enabled里面。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    基于端口的虚拟主机配置

    • 操作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;
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

    nginx -s reload
    
    • 1

    访问: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;
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    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;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    尝试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
    
    • 1
    • 2

    简单来说,这两行的意思就是,将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的功能,分别给资源就好了)

  • 相关阅读:
    【毕业设计】24-基于单片机的电子显示屏的设计与应用(原理图+源码+仿真工程+论文+答辩PPT)
    十一、做高并发内存池项目过程中遇到的bug以及调试bug的方法和心得
    微信小程序--》你真的了解小程序组件的使用吗?
    csdn最新最全pytest系列——pluggy插件源码解读(一)HookspecMarker类和HookimplMarker类分析
    vue3 组件篇 checkboxGroup
    Java面向对象编程
    常用正则表达式整理php
    基于SpringBoot的课程答疑系统
    分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测
    Redis集群选举原理与脑裂问题
  • 原文地址:https://blog.csdn.net/qq_41076797/article/details/127974710