nginx.conf之listen与server_name的意义

2024-02-19 23:28
文章标签 nginx 意义 server conf listen

本文主要是介绍nginx.conf之listen与server_name的意义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

server_name 为虚拟服务器的识别标志,匹配到特定的server块,转发到对应的应用服务器中去。

先上一段配置

server {listen       ip:端口;# 当listen出现了ip时,server_name就失去了意义。所以不配置也罢了。#server_name  域名;access_log   日志地址1;error_log    日志地址2;location / {root   /data/www/151;index  index.html index.htm;}}

客户端通过域名访问服务器时会将域名与被解析的ip一同放在请求中。当请求到了nginx中时。nginx会先去匹配ip,如果listen中没有找到对应的ip,就会通过域名进行匹配,匹配成功以后,再匹配端口。当这三步完成,就会找到对应的server的location对应的资源。

验证如下:

第一步:在客户端配置host,用于域名解析

[root@client html]# cat /etc/hosts
192.168.2.151 www.test151.com
192.168.2.152 www.test152.com
192.168.2.153 www.test153.com 

第二步:给虚拟机(服务端,以下这两个词会混用)配置另外三个ip,用于模拟多台服务器;

# ifconfig打印出的结果
eth0      Link encap:Ethernet  HWaddr 00:0C:29:BB:AC:FB  inet addr:192.168.2.19  Bcast:192.168.2.255  Mask:255.255.255.0inet6 addr: fe80::20c:29ff:febb:acfb/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:123455 errors:0 dropped:0 overruns:0 frame:0TX packets:123953 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:34612737 (33.0 MiB)  TX bytes:81191887 (77.4 MiB)
注意   eth0  下面的eth0是对应的,你的虚拟机可能不同
# ifconfig eth0:1 192.168.2.151/24 up
# ifconfig eth0:2 192.168.2.152/24 up
# ifconfig eth0:3 192.168.2.153/24 up再次执行
# ifconfig可以看到多了三个ip

 第三步:

[root@nginx]# cat /etc/hosts
192.168.2.151 www.test151.com
192.168.2.152 www.test152.com
192.168.2.153 www.test153.com 

第四步:建立相关的nginx的文件

1.建立虚拟主机存放网页的根目录,并创建首页文件index.html

# mkdir -p /usr/local/nginx/test/data/www
# mkdir /usr/local/nginx/test/data/logs/
# cd /usr/local/nginx/test/data/www
# mkdir 151
# mkdir 152
# mkdir 153
# echo "192.168.2.151" > 151/index.html; echo "192.168.2.152" > 152/index.html;echo "192.168.2.153" > 153/index.html
[root@localhost www]# ls
151  152  153

2.修改nginx.conf,将虚拟主机配置文件包含进主文件

server {listen       192.168.2.151:80;#server_name  www.test151.com;access_log   /usr/local/nginx/test/data/logs/www.test151.com.log main;error_log    /usr/local/nginx/test/data/logs/www.test151.com.error.log;location / {root   /usr/local/nginx/test/data/www/151;index  index.html index.htm;}}server {listen       192.168.2.152:80;#server_name  www.test152.com;access_log   /usr/local/nginx/test/data/logs/www.test152.com.log main;error_log    /usr/local/nginx/test/data/logs/www.test152.com.error.log;location / {root   /usr/local/nginx/test/data/www/152;index  index.html index.htm;}}server {listen       192.168.2.153:80;#server_name  www.test153.com;access_log   /usr/local/nginx/test/data/logs/www.test153.com.log main;error_log    /usr/local/nginx/test/data/logs/www.test153.com.error.log;location / {root  /usr/local/nginx/test/data/www/153;index  index.html index.htm;}}

客户端访问结果如下:

[root@client html]# curl 192.168.2.151
192.168.2.151
[root@client html]# curl 192.168.2.152
192.168.2.152
[root@client html]# curl 192.168.2.153
192.168.2.153
[root@client html]# curl www.test151.com
192.168.2.151
[root@client html]# curl www.test152.com
192.168.2.152
[root@client html]# curl www.test153.com
192.168.2.153
[root@client html]# 

可以使用ip和域名访问。但是是使用的ip进行匹配。

3.把server中的ip都删除,把server_name的注释都解开。重启nginx。再访问,发现用域名能访问到对应的资源,但是使用ip就只会出现192.168.2.151的资源。

这是因为通过域名和ip都能将请求发给nginx服务器,但是通过ip访问的时候nginx匹配不到任何内容,这个时候就会使用第一个server;但是通过域名则可以匹配到指定的后端服务器。

4.将 server_name = www.test153.com 的server的listen加上ip 192.168.2.152:80 ,重启nginx。

这个时候使用www.test152.com,或者192.168.2.152进行访问就可以得到 server_name = www.test153.com 的资源。

这是因为listen配上后server_name就失效了(优先匹配listen中的ip地址),当用域名访问www.test152.com的时候,客户端先将域名解析成ip地址,将请求发给nginx的时候,优先进行ip地址的匹配,当客户端通过ip地址访问的时候,直接匹配了ip地址。

如果server中配置了ip,那么我们就使用客户端带来的ip进行匹配,这个时候server_name失效。

总结

1、一台服务器可以配置多个ip

2、一个ip可以有多个域名;

3、文中一台虚拟机配置了多个ip是为了模拟局域网中其他服务器;而不是为了秀一个服务器可以配置多个ip,这样干在实际中没啥意义;

4、实际操作中一般将 listen 后面接端口而不接ip,因为接了ip后就只能通过ip匹配到相对应的server;

5、举例说明

server {listen       90;server_name  www.test151.com;access_log   /usr/local/nginx/test/data/logs/www.test151.com.log main;error_log    /usr/local/nginx/test/data/logs/www.test151.com.error.log;location / {root   /usr/local/nginx/test/data/www/151;index  index.html index.htm;}}

首先我们在其他电脑上输入 www.test151.com:90访问nginx时,这个时候找到的就是当前这个server代码;nginx所在服务器上会有配置host文件,里面会写上www.test151.com指向的是局域网中的那台机器,这个时候nginx就会将请求转发到host中所配置的服务器的相应端口中;

这篇关于nginx.conf之listen与server_name的意义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726326

相关文章

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa