最新网址:sk.x3qdu.com

本期主题:

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;



本章未完 点击下一页继续阅读