Nginx的基本配置文件和虚拟主机与域名解析和ServerName匹配规则

Nginx的基本配置文件

Nginx的默认配置文件是nginx.conf
在这里插入图片描述

查看对应的nginx.conf 文件

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

去掉注释的简单版如下:

# 默认为1,表示开启一个业务进程
worker_processes  1;

# 单个业务进程可接受连接数
events {
    worker_connections  1024;
}

http {
	#文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;
    
    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on;
    
	#长连接超时时间,单位是秒
    keepalive_timeout  65;
    
	#虚拟主机的配置
    server {
    #监听端口
        listen       80;
        
        #域名,可以有多个,用空格隔开
        server_name  localhost;
        
	  #配置根目录以及默认页面
        location / {
            root   html;
            index  index.html index.htm;
        }
        
		#出错页面配置
        error_page   500 502 503 504  /50x.html;
        
         #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
    }
}

Nginx 虚拟主机与域名解析

虚拟主机使用特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台虚拟的主机,每一台虚拟主机都具有独立的域名,具有完整的Internet服务器(WWW、FTP、Email等)功能,虚拟主机之间完全独立,并可由用户自行管理,在外界看来,每一台虚拟主机和一台独立的主机完全一样。

域名、DNS、IP地址的关系

输入域名 —> 域名解析服务器(DNS) ----> 解析成IP地址 ----> 通过IP地址完成访问内容 ----> 返回信息

Internetl上的计算器IP是唯一的,一个IP地址对应一个计算机。一台计算机上面可以有很多服务,也就是一个ip地址对应了很多个域名,即一个计算机上有很多网站。

Ip地址和DNS地址的区别
  • IP地址是指单个主机的唯一IP地址,而DNS服务器地址是用于域名解析的地址。
  • 一个是私网地址 , 一个是公网地址;
  • 一个作为主机的逻辑标志,一个作为域名解析服务器的访问地址。
IP地址

IP,就是Internet Protocol的缩写,是一种通信协议,我们用的因特网基本是IP网组成的。

DNS是什么?

我们访问因特网必须知道对端的IP地址,可是我们访问网站一般只知道域名啊,怎么办?
这时候DNS就有用处了,电脑先访问DNS服务器,查找域名对应的IP,于是,你的电脑就知道要发包到IP地址了。

http协议

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

客户端与服务器的数据交互的流程:

  1. 首先客户端与服务器需要建立TCP连接。只要单击某个超级链接。HTTP的工作开始
  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容,例如返回一个HTML的文本。
  4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

虚拟主机原理

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

域名解析

通过配置Nginx.conf文件来配置我们域名解析。默认的配置文件默认执行的地址是html目录下的index.html页面
在这里插入图片描述

1. 域名实战配置不同的域名映射不同的页面

修改配置文件 (修改配置文件之前最好先备份

worker_processes  1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个

events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
    worker_connections  1024;
}


http {
    #文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;

    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on;
    
     #长连接超时时间,单位是秒
    keepalive_timeout  65;

 #虚拟主机的配置
    server {
    #监听端口
        listen       80;
        #域名,可以有多个,用空格隔开
        server_name  master.lixiang.cn;

	#配置根目录以及默认页面
        location / {
            root   /www/master;
            index  index.html index.htm;
        }

	#出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
    }
    
    
    #虚拟主机的配置
    server {
    #监听端口
        listen       80;
        #域名,可以有多个,用空格隔开
        server_name   dev.lixiang.cn;

	#配置根目录以及默认页面
        location / {
            root   /www/dev;
            index  index.html index.htm;
        }

	#出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
      }
    }

映射根目录下面的www目录下面对应的文件
在这里插入图片描述

2. 修改本地windows下面的host文件

路径在: C:\Windows\System32\drivers\etc

在这里插入图片描述
在配置文件下面添加一行映射地址(配置单机域名)
在这里插入图片描述

使用systemctl reload nginx.service重新加载配置

3. 测试

访问:http://master.lixiang.cn/
在这里插入图片描述
访问:http://master.lixiang.cn/
在这里插入图片描述
访问:http://lixiang.cn/
在这里插入图片描述
匹配不上默认为第一个

监听多端口

操作跟域名解析一样 只要修改server --> listen 端口即可 (注意:server_name和listen同时想等会报错

泛域名

所谓“泛域名解析”是指:利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址。

好处:

1.可以让域名支持无限的子域名(这也是泛域名解析最大的用途)。

2.防止用户错误输入导致的网站不能访问的问题

3.可以让直接输入网址登陆网站的用户输入简洁的网址即可访问网站

泛域名在实际使用中作用是非常广泛的,比如实现无限二级域名功能,提供免费的url转发,在IDC部门实现自动分配免费网址,在大型企业中实现网址分类管理等等,都发挥了巨大的作用。

我在阿里云购买的域名配置如下:

在这里插入图片描述

在这里插入图片描述

ServerName匹配规则

我们可以在同一个servername中配置多个域名 (注意:需要注意的是精确匹配的优先级大于通配符匹配和正则匹配。)

完整匹配

server_name master.ride4you.top  dev.ride4you.top;

通配符匹配

server_name *.ride4you.top ;

通配符结束匹配

使用通配符结束匹配的方式如下:

server_name *.ride4you.*;

正则匹配

正则匹配格式,必须以~开头,比如:server_name ~^www\d+.example.net ; 。如果开头没有 ,则 n g i n x 认为是精确匹配。在逻辑上,需要添 加 和 ;。如果开头没有~,则nginx认为是精确匹配。在逻辑上,需要添加^和 ;。如果开头没有 ,则nginx认为是精确匹配。在逻辑上,需要添锚定符号。注意,正则匹配格式中.为正则元字符,如果需要匹配.,则需要反斜线转义。如果正则匹配中含有{和}则需要双引号引用起来,避免nginx报错,如果没有加双引号,则nginx会报如下错误:directive “server_name” is not terminated by “;” in …。

特殊匹配格式

server_name ""; 匹配Host请求头不存在的情况。

匹配顺序

1. 精确的名字
2. 以*号开头的最长通配符名称,例如 *.example.org
3. 以*号结尾的最长通配符名称,例如 mail.*
4. 第一个匹配的正则表达式(在配置文件中出现的顺序)

优化

1. 尽量使用精确匹配;
2. 当定义大量server_name时或特别长的server_name时,需要在http级别调整server_names_hash_max_size和server_names_hash_bucket_size,否则nginx将无法启动。

附录:
为区分大小写的匹配
~* 不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)

!~ 区分大小写不匹配

!~* 不区分大小写不匹配

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线或汉字

\s 匹配任意的空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

*重复零次或更多次前面一个字符

+重复一次或更多次前面一个字符

? 重复零次或一次前面一个字符

{n} 重复n次前面一个字符{n,} 重复n次或更多次

{n,m} 重复n到m次

*? 重复任意次,但尽可能少重复

+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复{n,m}? 重复n到m次,但尽可能少重复{n,}? 重复n次以上,但尽可能少重复

\W 匹配任意不是字母,数字,下划线,汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配除了x以外的任意字符

[^abc] 匹配除了abc这几个字母以外的任意字符

(exp) 匹配exp,并捕获文本到0…9

(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name’exp)(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

(?=exp) 零宽断言,匹配exp前面的位置

(?<=exp) 匹配exp后面的位置

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp) 匹配前面不是exp的位置

(?#comment) 注释,这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

参考文章:https://hashnode.blog.csdn.net/article/details/124518509

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nginx基于域名的多虚拟主机实战配置,可以通过以下步骤来完成: 1. 首先在nginx配置文件中添加多个server块,每个server块对应一个虚拟主机。例如: ``` server { listen 80; server_name www.example.com; root /var/www/example; index index.html; } server { listen 80; server_name www.anotherexample.com; root /var/www/anotherexample; index index.html; } ``` 2. 然后在DNS服务器中将每个域名解析nginx服务器的IP地址上。 3. 最后重新加载nginx配置文件,使其生效。 这样就可以实现基于域名的多虚拟主机配置了。当用户访问不同的域名时,nginx会根据server_name指令匹配对应的虚拟主机,并将请求转发到相应的root目录下。 ### 回答2: Nginx是一款高性能的web服务器,它的一个重要特性就是可以支持基于域名的多虚拟主机。什么是域名呢?域名就是网站的地址,例如www.baidu.com、www.sina.com.cn等等。在同一台服务器上,可以先通过域名将网站进行分类,然后再进行不同配置Nginx的基于域名的多虚拟主机实战配置步骤如下: 1. 首先,需要安装Nginx,可以使用命令sudo apt-get install nginx进行安装; 2. 修改Nginx配置文件,打开/etc/nginx/nginx.conf文件,找到server块,进行如下配置server { listen 80; server_name www.example1.com; location / { root /data/www/example1; index index.html index.htm; } } server { listen 80; server_name www.example2.com; location / { root /data/www/example2; index index.html index.htm; } } 在这段配置中,Nginx为两个虚拟主机配置了不同的域名和root路径。注意,每个server块中必须有一个listen指令,用来指定虚拟主机监听的端口号。在本例中,我们使用80端口。 3. 保存配置文件并重启Nginx服务,重启命令sudo service nginx restart; 4. 在服务器上的域名服务商中添加两个域名指向服务器IP地址,例如www.example1.com指向192.168.1.1和www.example2.com指向192.168.1.1。 到此为止,我们已经配置好了基于域名的多虚拟主机。当用户在浏览器中输入www.example1.com时,Nginx会使用第一个server块中的配置作为返回结果;当用户在浏览器中输入www.example2.com时,Nginx会使用第二个server块中的配置作为返回结果。每个虚拟主机根据不同的域名,实现不同的访问路径和访问内容,提供不同的服务。这种配置方式可以提高服务器的资源利用率,降低服务器成本,更好地满足不同的业务需求。 ### 回答3: nginx是一款优秀的开源服务器软件,支持基于域名的多虚拟主机配置,实现在一台服务器上分别托管多个网站,具有高效、稳定的特点。在实际应用中,我们可以通过以下步骤来进行nginx的基于域名的多虚拟主机配置: 1. 配置nginx服务器的默认配置文件:在配置文件中,我们需要添加多个server块,每个块代表一个虚拟主机。每个块中需要设置server_name以及root指令,前者代表虚拟主机的域名,后者代表虚拟主机的站点根目录。 2. 配置DNS域名解析:在DNS服务器中设置域名解析,将希望访问的域名指向nginx服务器的IP地址。 3. 重启nginx服务器:在配置完成后,我们需要重启nginx服务器,将新的配置生效。 配置完成后,当用户请求各自的域名时,nginx会根据请求的域名来匹配相应的虚拟主机,并将请求路由到对应的虚拟主机中。通过这种方式,我们可以在一台服务器上托管多个网站,而不必额外增加硬件花费。 在实际应用中,我们可以通过nginx的基于域名的多虚拟主机配置,来实现网站的自定义化、分流、负载均衡等需求。通过合理策划多个虚拟主机配置,可以充分发挥服务器资源的利用率,提高网站的性能和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值