本期主题:
7天掌握《Java编程与面试2024》的核心三章59问,即Java基础面试题篇19问,Nginx使用篇15问,微服务配置篇25问。
下面,先来介绍一下,以上三个篇章各自的核心问题:
第一章【Java基础面试题篇】(19问)
1、Java语言,有哪些特点?
2、char类型变量,是否能保存一个汉字?
3、==和equals()的区别?
4、final、finally、finalize的区别?
5、一个.java源文件中,是否可以包含多个类(不是内部类)呢?又有什么限制呢?
6、&与&&的区别?
7、JAVA中的保留字,都有什么?
8、Colle和Colles的区别?
9、如何去掉Vector集合中的重复元素?
10、ArrayList和Vector的区别?
11、HashMap和Hashtable的区别?
12、说说ArrayList,Vector, LinkedList三者的存储性能和特性?
13、HashMap与TreeMap的区别?
14、List、Map、Set三个接口,在存储元素时,各有什么特点?
15、在Java中,List是个接口,那实现List接口的类有哪些,它们又有什么区别?
16、判断下列语句是否正确,如果有错误,请指出错误所在?
17、A=10, B=20使得两值互换?
18、只移动一个数字,使62 - 63 = 1成立(不能移动符号)?
19、字符串面试的经典源码示例?
...
第二章【Nginx使用篇:SpringBoot+SpringCloud】(15问)
1、请解释一下,什么是 Nginx?
2、为什么要用Nginx?
3、Nginx的优缺点?
4、Nginx应用场景?
5、使用“反向代理服务器”的优点是什么?
6、请列举Nginx服务器的最佳用途?
7、请解释下,Nginx是如何处理HTTP请求的?
8、在Nginx中,如何使用未定义的服务器名称,来阻止处理请求的?
9、在Nginx中,如何在URL中保留双斜线?
10、ngx_http_upstream_module的作用是什么?
11、fastcgi与cgi的区别?
12、Nginx常用命令?
13、Nginx常用配置?
14、请陈述stub_status和sub_filter指令的作用是什么?
15、主从 Reactor多线程模型?
...
第三章【微服务配置篇:SpringBoot+SpringCloud】(25问)
一、什么是SpringBoot?
二、SpringBoot常用的starter?
三、SpringBoot自动配置原理?
四、SpringBoot starter工作原理?
五、SpringBoot的优点?
六、SpringCloud解决了哪些问题?
七、SpringBoot与SpringCloud的关系?
八、微服务是如何调用的?
九、微服务调用的原理?
十、微服务如何实现负载均衡?
十一、配置详解?
十二、Eureka?
十三、Eureka的高可用配置?
十四、谈谈微服务?
十五、微服务和SOA的关系?
十六、SpringCoud是如何实现服务注册与发现的?
十七、Ribbon和Feign的区别?
十八、雪崩效应?
十九、熔断机制?
二十、Eureka的基础架构?
二十一、Eureka和Zookeeper都可以提供服务注册与发现的功能,而两者的区别是?
二十二、CAP理论?
二十三、Ribbon和Nginx的区别?
二十四、服务注册与发现?
二十五、微服务的负载均衡,为何用?怎么用?
......
第一章【Java基础面试题篇】
1、Java语言,有哪些特点?
答:
简单性(Simple);
结构体系中立(Architecture ral);
面向对象(Object Oriented);
易于移植(Portable);
分布式(Distributed);
高性能(High Performantce);
多线程(Multithreaded);
健壮性(Robust);
动态性(Dynamic);
安全性(Secure)。
...
2、char类型变量,是否能保存一个汉字?
答:可以。
在Java语言中,一个char类型变量占16位bit(即2个字节byte)的存储空间。
由于Java语言,使用Unicode字符集对字符进行编码...
因此,char类型变量可以存储任何字符;
这些字符,可以是英文字符、汉字、日文片断,以及其它国家的许多字符。
相关详细知识点:
在计算机中的存储单位,是以字节为单位的。
常见的磁盘大小和文件大小,分别以GB、MB、KB等来表示...
它们之间的换算单位是1GB=1024MB,1MB=1024KB,1KB=1024byte(即字节)。
每个字节的取值范围是-128到127,它可以保存一个英文字符,包括字母、数字和英文标点。
而汉字的存储,是由2个字节保存的。
因为汉字的数量太多,它的编码范围,远远超过一个字节的取值范围...
所以,必须要使用双字节来表示。在Java语言中...
使用Unicode字符集,对字符进行编码,可以存储65535个字符。
所以Java字符类型,被定义为双字节。
因此,在Java语言中,可以使用char类型变量,来存储汉字。
...
3、==和equals()的区别?
答:有2点区别,即...
(1)==,是用于比较基本数据类型的值,以及比较引用数据类型,在内存中存放的地址。
(2)equals方法,在比较引用数据类型时...
如果没有覆盖Object类的equals方法,则同==一样,比较内存中的存放地址;
反之,则像String字符串等类的equals方法一样,去比较引用数据类型的内容了。
...
4、final、finally、finalize的区别?
答:
final,用于声明属性,方法和类...
分别表示属性不可变,方法不可覆盖,类不可继承。
\tfinally,是异常处理语句结构的一部分,表示总是执行。
finalize,是Object类的一个方法...
在垃圾收集器执行的时候,会调用被回收对象的此方法;
可以覆盖此方法,以提供垃圾收集时的其它资源回收,例如关闭文件等。
...
5、一个.java源文件中,是否可以包含多个类(不是内部类)呢?又有什么限制呢?
答:可以包含多个类。
但,只能有一个public类,且public的类名,必须与文件名一致。
...
6、&与&&的区别?
答:主要有点区别,即...
(1)&和&&都可以用作逻辑与(and)运算;
(2)&&还具有短路的功能;
(3)&还可以按位运算。
下面,详细说明下以上3点区别:
(1)&和&&用作逻辑与运算符
&和&&,都可以用作逻辑与的运算符,表示逻辑与(and)。
当运算符,两边表达式的结果,都为true时...
整个运算结果才为true;
否则,只要有一方为false,则结果为false。
(2)&&有短路功能
&&除了可作逻辑与运算符外,还具有短路的功能...
即如果第一个表达式为false,则不再计算第二个表达式。
例如,对于if(str != null &&!str.equals(“”))表达式...
当str为null时,后面的表达式不会执行;
所以不会出现NullPointerException空指针异常。
而如果将&&改为&,此时则会抛出NullPointerException异常了。
在If(x==33 &++y>0)中,y会增长;
而在If(x==33 &&++y>0)中,则不会增长。
(3)&用作位运算符
&还可以用作位运算符。
当&操作符两边的表达式,不是boolean类型时...
&表示“按位与”操作。
我们通常使用0x0f,来与一个整数进行&运算...
来获取该整数的最低4个bit位。
例如,“0x31 & 0x0f”的结果为“0x01”。
...
7、JAVA中的保留字,都有什么?
答:goto,st。
关键字Keyword:
Java的关键字,对Java的编译器有特殊的意义...
它们用来表示一种数据类型,或者表示程序的结构等。
保留字Reserved word:
保留字,是为java预留的关键字。
它们虽然现在没有作为关键字,但在以后的升级版本中,有可能作为关键字。
...
8、Colle和Colles的区别?
答:主要2点区别,即...
(1)Colle是集合类的上级接口,继承于它的主要接口有List和Set;
(2)Colles是针对集合类的一个帮助类...
它提供了,一系列静态方法,以实现对各集合的搜索、排序、线程安全化等操作。
...
9、如何去掉Vector集合中的重复元素?
答:有两种方式可以去掉Vector集合中的重复元素。
下面,我来具体说说这两种方式...
方式一:
Vector or = new Vector();
for(int i = 0; i < vector.size(); i++){
Object obj = vectet(i);
if(!or.tains(obj)){
or.add(obj);
}
}
方式二:
HashSet set = new HashSet(vector);
因为,HashSet集合中允许存在重复元素。
...
10、ArrayList和Vector的区别?
答:两者的同步性和数据增长不同。
一、同步性不同
Vector是线程安全的,也就是同步的。
而ArrayList,则是线程不安全的,不是同步。
二、数据增长不同
当需要增长时,Vector默认增长为原来的一倍。
而ArrayList,却是原来的一半。
...
11、HashMap和Hashtable的区别?
答:两者主要有三点区别,即...
一、历史来源不同
Hashtable,是基于陈旧的Diary类的。
而HashMap,则是Java 1.2引进的Map接口的一个实现类。
二、同步性不同
Hashtable是线程安全的,也就是同步的。
而HashMap,不是线程安全的,不是同步的。
三、是否允许“空值”不同
只有HashMap,可以让你将一个空值,作为一个表条目的key或value。
...
12、说说ArrayList,Vector, LinkedList三者的存储性能和特性?
答:
ArrayList和Vector,都是使用数组方式存储数据...
此数组元素数,大于实际存储的数据,以便增加和插入元素。
它们都允许,直接按序号索引元素...
但插入元素,要涉及数组元素移动等内存操作;
所以,索引数据快,而插入数据慢。
Vector,由于使用了synized方法(线程安全)...
通常在性能上,较ArrayList差。
而LinkedList,是使用双向链表实现存储的...
按序号索引数据,需要进行前向或后向遍历;
但插入数据时,只需要记录本项的前后项即可,所以插入速度较快。
...
13、HashMap与TreeMap的区别?
答:
HashMap是通过hashcode,对其内容进行快速查找的。
而TreeMap中所有的元素,都保持着某种固定的顺序。
所以,如果你需要得到一个有序的结果...
那么,你就应该使用TreeMap。
因为,HashMap中元素的排列顺序,是不固定的。
...
14、List、Map、Set三个接口,在存储元素时,各有什么特点?
答:
1)List是有序的Colle…
使用此接口,能够精确的控制每个元素插入的位置。
用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素…
这类似于Java的数组。
2)Set是一种不包含重复的元素的Colle…
即任意的两个元素e1和e2都有e1.equals(e2)=false。
此外,Set最多有一个null元素。
3)Map接口…
请注意,Map没有继承Colle接口。
Map是提供了key到value的映射。
…
下面,让我来具体说说…
List、Map、Set,是Java中常用的三种集合接口。
它们在存储元素时,各自具有不同的特点:
1)List接口
具有5个特点,即有序性,可重复性,可变性,元素类型,操作方法。
有序性:
List集合中的元素,按照插入顺序进行存储…
可以通过索引,去访问和操作集合中的元素。
可重复性:
List集合中,允许存储重复的元素…
即同一个元素可以多次出现在集合中。
可变性:
List集合中的元素,可以随时增加、删除和修改,集合的大小可以动态改变。
元素类型:
在List集合中,可以存储任意类型的元素…
包括基本数据类型和引用类型。
操作方法:
List集合,提供了丰富的方法,来操作集合中的元素…
比如添加、删除、获取元素,查找元素等。
2)Map接口
具有5个特点,即键值对存储,键的唯一性,值的可重复性,键和值的类型,单向一对一关系。
键值对存储:
Map用于保存具有映射关系的数据…
即Key-Value对(双列元素)。
键的唯一性:
Map中的key不允许重复,每个key都唯一对应一个value。
值的可重复性:
Map中的value可以重复,即多个key可以对应相同的value。
键和值的类型:
Map中的key和value,可以是任何引用类型的数据。
单向一对一关系:
Map中key和value之间,存在单向一对一关系…
即通过指定的key,总能找到对应的value。
3)Set接口
具有5个特点,即无序性,元素的互异性,空集性质,元素类型,测试归属性。
无序性:
Set集合中的元素位置无顺序,元素之间是无序的。
元素的互异性:
Set集合不允许出现重复元素,每个元素只能出现一次。
空集性质:
空集是一切集合的子集,Set也可以表示空集。
元素类型:
Set集合中可以存储任意类型的元素。
测试归属性:
Set最常被用于测试归属性…
可以很容易地查询某个对象,是否在某个Set中。
综上所述:
List、Map、Set三种接口,在存储元素时的主要区别…
在于元素的顺序性、重复性、以及存储结构(List是有序列表,Map是键值对映射,Set是无序集合)。
所以,在实际使用中,我们可以根据需求…
去选择合适的集合类型,来存储和处理数据。
…
15、在Java中,List是个接口,那实现List接口的类有哪些,它们又有什么区别?
答:
在Java中,List确实是一个接口…
它属于Java的集合框架(Java Colles Framework)。
List接口定义了一些基本的操作,比如添加、删除元素等。
有很多类实现了List接口,诸如ArrayList、LinkedList、Vector等等。
这些实现类之间的主要区别,在于三者的内部实现机制和性能特性:
1)ArrayList
ArrayList内部基于数组实现…
因此它提供了,对元素的随机访问(即通过索引访问)的高效性。
当添加或删除元素时…
如果列表的大小,超过了其内部数组的大小,ArrayList会自动扩容;
这可能会涉及到数组元素的复制;
因此,在大量添加或删除元素时,可能会产生较高的开销。
在大部分情况下,ArrayList是List接口的首选实现…
特别是,当你需要频繁地,访问列表中的元素时。
2)LinkedList
LinkedList内部基于链表实现…
因此它提供了,在列表开头和结尾,添加或删除元素的高效性。
对于随机访问元素…
LinkedList的性能较差,因为它需要从列表的一端开始遍历。
因此,如果你需要…
频繁地在列表的开头或结尾,添加或删除元素的话…
那么LinkedList,可能是一个更好的选择。
3)Vector
Vector和ArrayList类似…
也是基于数组实现的,但它提供了线程安全的操作。
这是通过在每个公共方法上,添加同步来实现的…
因此,它可能会比ArrayList慢。
在现代Java编程中,我们通常更倾向于使用并发集合(如currentHashMap)…
或者,显式地同步代码块;
而不是使用Vector,因为同步的开销可能会比较大。
此外…
还有其它一些类,也实现了List接口,例如CopyOnWriteArrayList…
它适用于读多写少的并发场景。
至于选择哪个实现类,则取决于你的具体需求,比如访问模式、线程安全性、性能要求等。
…
16、判断下列语句是否正确,如果有错误,请指出错误所在?
List<Sht; a = new ArrayList<Sht;();
a.add(5);
答:正确。
在Java中,你可以创建一个ArrayList,它存储的元素类型是Short。
Short是Java的一个包装类,用于表示基本数据类型short的值。
当你调用“a.add(5);”时…
Java会自动将基本数据类型“int的5”,转换成包装类型Short。
因为,5在short的范围内(即-32768到32767)。
所以,可以安全地转换为Short。
因此,这段代码会成功地向ArrayList中…
添加一个Short类型的对象,其值为5。
这是自动装箱(autoboxing)的一个例子…
它是Java 5及以上版本,提供的一个特性;
允许在基本数据类型,和它们对应的包装类之间,进行自动转换。
…
17、A=10, B=20使得两值互换?
答:
1)中间变量:C = A; A = B; B = C.
2)A = A - B; B = B + A; A = B - A.
…
18、只移动一个数字,使62 - 63 = 1成立(不能移动符号)?
答:2的6次方- 63 = 1。
注意:要从“移动一个数字”的思维中抽离出来,考虑次方实现。
…
19、字符串面试的经典源码示例?
答:具体代码示例如下…
package .exam.prj.a.String;
/**
*@author AARON
*/
public class Stri {
\tpublic statiain(String[] args){
\t\t//
\t\t//判断生成几个对象
\t\t//\t\t
\t\t//生成2个对象. String Pool中生成一个对象“aaron”,Heap中生成一个对象“aaron”.
\t\tString strA = ring(“aaron“);\t\t
\t\t//未生成新对象.判断String Pool中是否存在“aaron”,存在则strB直接引用“aaron”对象.
\t\tString strB =“aaron“;
\t\t
\t\t//生成1个对象.在Heap中生成一个对象“aaron”.
\t\tString strew String(“aaron“);
\t\t
\t\tSystem.out.println(strA == strB);\t//\tfalse
\t\tSystem.out.println(strA == strC);\t//\tfalse
\t\tSystem.out.println(strB == strC);\t//\tfalse
\t\t// intern()返回在String Pool中存在的地址
\t\tSystem.out.println(strA == strA.intern());\t//\tfalse
\t\tSystem.out.println(strB == strB.intern());\t//\ttrue
\t\tSystem.out.println(strA.intern()== strtern());\t//\ttrue
\t\t//
\t\t//判断字符串变量的内存地址是否相等
\t\t//
\t\t
\t\tString aaron =“aaron“;
\t\tString aa =“aa“;
\t\tString ron =“ron“;
\t\t
\t\t//“aa“+“ron“,这是两个字符串常量相加,拼接结果为“aaron”,然后到String Pool中判断获得内存地址
\t\tSystem.out.println(aaron ==“aa“+“ron“);// true
\t\t
\t\t//“aa“+ ron,这是字符串常量和变量相加,拼接结果为“aaron”,然后在Heap中创建一个“aaron”对象
\t\tSystem.out.println(aaron ==“aa“+ ron);// false
\t}
}
......
第二章【Nginx使用篇】
1、请解释一下,什么是 Nginx?
Nginx,是一个 Web服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3和 IMAP协议。
目前是被使用最多的 Web服务器,代理服务器...
像淘宝、新浪、网易、迅雷等,都在使用。
Nginx的主要功能如下:
(1)作为 http server (代替 Apache
对 PHP需要 FastCGI处理器支持)。
(2)FastCGI
Nginx本身不支持 PHP等语言...
但是它,可以通过 FastCGI来将请求,扔给某些语言或框架处理。
(3)反向代理服务器
(4)实现负载均衡
(5)虚拟主机
...
2、为什么要用Nginx?
因为Nginx具有:
跨平台,配置简单,反向代理,缓存服务,邮件代理服务器...
高并发连接数,内存消耗小,拥有健康检查功能...
节省宽带,稳定性高,接受请求异步等优秀的特性。
下面,就让我来具体说说Nginx的一些优秀特点吧!
高并发连接数:
Nginx处理2-3万并发连接数,官方监测能支持5万并发。
内存消耗小:
开启10个nginx,才占150M内存;
Nginx处理静态文件效果好,耗费内存少。
健康检查功能:
Nginx内置了健康检查功能;
当有一个服务器宕机时,就会做一个健康检查...
之后再发送的请求,就不会发送到宕机的服务器了;
而是,重新将请求,提交到其它的节点上。
节省宽带:
支持GZIP压缩,可以添加浏览器本地缓存。
稳定性高:
宕机的概率非常小。
接受请求异步:
即接收的用户请求,是异步的。
...
3、Nginx的优缺点?
优点:
占内存小,可实现高并发连接,处理响应快…
可实现http服务器、虚拟主机、方向代理、负载均衡。
Nginx的配置简单,还可以不暴露正式的服务器IP地址。
缺点:
动态处理差。
Nginx处理静态文件好,耗费内存少…
但是处理动态页面则很鸡肋,因为现在一般前端用Nginx作为反向代理抗住压力。
…
4、Nginx应用场景?
1)http服务器
Nginx是一个http服务,可以独立提供http服务。
可以做网页静态服务器。
2)虚拟主机
它可以实现,在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
3)反向代理与负载均衡
当网站的访问量,达到一定程度后,单台服务器不能满足用户的请求时…
就需要用多台服务器集群,可以使用Nginx做反向代理。
并且多台服务器,可以平均分担负载…
不会因为某台服务器负载高而宕机。
4)Nginx中也可以配置安全管理
比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
…
5、使用“反向代理服务器”的优点是什么?
反向代理服务器,可以隐藏源服务器的存在和特征。
它充当互联网云和web服务器之间的中间层。
这对于安全方面来说是很好的,特别是当您使用web托管服务时。
…
6、请列举Nginx服务器的最佳用途?
Nginx服务器,是一种高性能的HTTP和反向代理服务器…
它具有丰富的功能和广泛的应用场景。
Nginx服务器的7个最佳用途…
即静态HTTP服务器,负载均衡,虚拟主机,邮件代理服务器,性能优化,安全性,高并发与高稳定性。
1)静态HTTP服务器
Nginx可以将服务器上的静态文件(如HTML、图片、CSS、JavaScript等)…
通过HTTP协议,高效地展现给客户端。
2)负载均衡
当网站访问量非常大时,可以将同一个应用部署在多台服务器上。
Nginx通过反向代理的方式,实现负载均衡…
将大量用户的请求,分配给多台机器处理。
这不仅可以提高网站的响应速度,还增强了系统的可用性和可靠性。
在负载均衡过程中,Nginx可以灵活配置各种负载均衡算法,来满足不同的业务需求。
3)虚拟主机
对于访问量较小的网站…
Nginx支持在同一台服务器上,部署多个网站,从而通过虚拟主机的方式,来节省成本。
4)邮件代理服务器
Nginx也是一个非常优秀的邮件代理服务器…
可以处理邮件相关的任务,如SMTP、POP3和IMAP等。
5)性能优化
Nginx提供了多种性能优化策略,如启用缓存、压缩响应、启用TCP缓冲、启用HTTP2等。
这些策略,可以显著提高网站的性能,减少网络传输数据量,加快页面响应速度。
6)安全性
尽管Nginx本身具有一些安全漏洞,但通过合理配置和更新,可以大大提高网站的安全性。
例如…
可以限制缓存文件的大小和时间,设置验证规则以验证数据是否被篡改,从而加强缓存安全。
7)高并发与高稳定性
Nginx以高速、高并发、高稳定性著称。
其内部的事件驱动架构,以及采用异步非阻塞方式,去处理客户端请求的特点…
使得在高并发请求下,Nginx依然能够保持稳定性。
这使得Nginx,成为了处理大量并发连接的理想选择…
尤其适用于,大型高负载的Web应用程序、云计算、物联网等领域。
总的来说:
Nginx服务器在Web服务、负载均衡、性能优化、安全性和稳定性等方面都有出色的表现。
Nginx是构建高效、可靠和安全的网络应用的理想选择。
然而,具体的最佳用途,可能因应用场景和需求的不同而有所差异。
因此在实际使用中,我们需要根据具体情况,去进行配置和优化。
…
7、请解释下,Nginx是如何处理HTTP请求的?
因为Nginx使用了“反应器模式”。
主事件循环,等待操作系统发出准备事件的信号…
这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。
且单个线程可以提供数万个并发连接。
下面,让我来具体说说…
实际上,Nginx处理HTTP请求的过程…
是一个复杂而高效的操作,它涉及到多个阶段和模块。
Nginx处理HTTP请求的“六部曲”,即…
接收请求,解析请求,访问URI,反向代理和负载均衡,处理动态请求,记录日志。
1)接收请求
Nginx使用监听器,来接收客户端发送的HTTP请求。
监听器会绑定到一个特定的端口上,并等待客户端的连接请求。
一旦有新的连接到达,监听器会创建一个连接对象…
并将这个连接对象,放入连接池中等待处理。
2)解析请求
当Nginx从连接池中,取出一个连接对象时…
它会开始读取,该连接对象中的请求数据。
这个过程包括解析请求行、请求头和请求体。
请求行,包含了HTTP方法(如GET、POST等)、请求的URI以及HTTP协议的版本信息。
请求头,则包含了客户端发送的各种元数据和请求参数。
请求体,通常用于POST请求,包含了客户端提交的数据。
3)访问URI
解析完请求后,Nginx会根据请求的URI,来决定如何处理这个请求。
如果请求的URI,对应的是静态文件…
Nginx会直接从文件系统中读取这个文件,并将其作为响应返回给客户端。
如果请求的URI,对应的是动态内容…
Nginx则需要将请求,转发给后端服务器进行处理。
4)反向代理和负载均衡
如果请求需要由后端服务器处理…
Nginx会作为反向代理服务器,将请求转发给后端服务器。
在这个过程中,Nginx还可以使用负载均衡算法…
将请求分发到多个后端服务器上;
以充分利用这些服务器的资源,提高系统的吞吐量和可靠性。
5)处理动态请求
对于需要动态生成内容的请求…
Nginx会将请求转发给后端服务器(如PHP、Python、Java等应用服务器)来处理。
后端服务器,会根据请求的内容,生成相应的响应,然后将响应返回给Nginx。
Nginx再将这个响应,封装成一个HTTP响应对象,发送给客户端。
6)记录日志
在处理完请求后,Nginx会记录相关的访问日志和错误日志。
这些日志,可以帮助管理员了解服务器的运行状态,以及分析和优化性能。
在整个处理过程中,Nginx使用了“事件驱动的模型”来同时处理多个请求。
这种模型,使得Nginx能够高效地处理并发请求,提供高性能的Web服务。
此外,Nginx还允许通过配置和扩展模块…
来支持更多的功能和优化策略,以满足不同的业务需求。
…
8、在Nginx中,如何使用未定义的服务器名称,来阻止处理请求的?
只需将请求删除的服务器就可以定义为:
Server {
listen 80;
server_name““;
return 444;
}
这里,服务器名被保留为一个空字符串…
它将在没有“主机”头字段的情况下,匹配请求。
而一个特殊的Nginx的非标准代码444,被返回,从而终止连接。
…
9、在Nginx中,如何在URL中保留双斜线?
要在URL中保留双斜线,就必须使用“merge_slashes_off;”。
语法:merge_slashes [onoff];
默认值:merge_slashes on;
本章未完 点击下一页继续阅读