이 글에서는 주로 Nginx 가상 서버 도메인 이름 구성 방법을 공유합니다. 가상 서버 이름(서버 이름)은 server_name 명령을 통해 지정됩니다. 존재하다"
Nginx는 요청을 어떻게 처리합니까? "섹션에서 우리는 두 단계로 들어오는 요청 요청과 일치하는 nginx에 대해 이야기했습니다.
1. 서버 선택
2. 위치 선택
1단계에는 실제로 두 단계가 있습니다.
1) . 포트 일치
2). server_name 일치
이 섹션에서는 nginx가 어떻게 server_name과 일치하는지 설명합니다.
server_name 명령에는
3가지 형식이 있습니다.
1. 정확한 도메인 이름 형식(정확한 이름)
2. 와일드카드(*) 형식
3.
server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name *.example.org; ... } server { listen 80; server_name mail.*; ... } server { listen 80; server_name ~^(?<user>.+)\.example\.net$; ... }와일드카드 형식은 실제로
정방향 와일드카드
와역방향 와일드카드로 구분됩니다(각각 두 번째 및 세 번째 예 참조). 와일드카드는 문자열 중간에 위치할 수 없습니다.
물론 호스트가 위 세 가지 형식 중 하나 이상과 동시에 일치하는 상황이 있습니다. 예를 들어 호스트가 www.example.com인 경우 동시에 일치할 수 있습니다.
, 최종 선택은 어느 것입니까?
특정 순서가 있습니다: 정확한 도메인 이름 일치, www.example.com 와일드 카드 *, , *.example.com 와일드카드 *로 끝나는 가장 긴 도메인 이름 , www.example.* 그리고 마지막으로 정규식 형식으로 구성 파일에 나타나는 순서대로 일치를 시도하고 일치하는 첫 번째 것을 선택합니다. 도메인 이름 ~^(.+).example.com$ 에는 매우 간단하고 정확한 도메인 이름 형식이 있습니다. 다음으로 각각 server_name의 와일드카드 및 정규식 형식을 소개하겠습니다. 와일드카드 서버 이름에 *를 사용하는 것은 매우 엄격합니다. 는 도메인 이름의 머리나 꼬리에만 위치할 수 있고 중간에는 위치할 수 없으며 "."로 구분해야 합니다. : *.example.com www.example.* 다음은 불법적인 형식입니다. www.*.example.org w*.example.org 물론, 마지막 두 가지를 달성하려는 경우 작성자가 반영한 목적에 맞게 정규식을 사용할 수 있습니다. 예를 들어 위의 두 가지 불법 도메인 이름은 다음과 같이 작성할 수 있습니다. ~^www..+.example.org$ ~^w.*.example.org $ 또 다른 특수 형식은 example.org 및 *.example.org 모두와 일치할 수 있습니다. 이는 .example.org 正则表达式 nginx的正则表达式语法使用的是Perl语言(PCRE)的正则语法。基本形式为 server_name ~^www\d+\.example\.net$; 这则表达式需要注意的几点 必须以~开始,没有~符号的要么被视作完全匹配或者通配符匹配 ~和正则表达式主体之间没有空格 正则表达式主体通常以^开始以$结束(虽说语法上不一定要求如此,但是从逻辑意义上强烈要求这么做)。 正则表达式中,点号"."必须转义,写作"\.";正则表达式可以不用引号包住,但是,如果其中包含"{"和"}"则必须用双引号包裹 例如: server_name "~^(? 如果不加引号,nginx便无法正确加载配置文件,并报一个错误: directive "server_name" is not terminated by ";" in ... 正则表达式使用命名捕获组,例如: PCRE语法支持下面几种捕获语法: 前面两者是最新的语法,第三种是老的写法。如果nginx报下面错误: pcre_compile() failed: unrecognized character after (? 说明,你应该将? 同样,使用普通捕获组也是可以的: 当然,普通捕获组要慎用,因为很容易被后面的正则所覆盖。 其他形式 除了两面提到的几种形式,sername_name的指令参数还有可能是其他的几种形式。 如果请求Request没有Host的头部,那么如果想要匹配,可以用空字符串: 另外,如果在server上下文中,没有定义 server_name,那么nginx使用空字符串作为虚拟机名称。 如果使用IP而不是域名来发起请求,那么Host请求头就是一个IP,此时server_name也可以写成一个IP: "_"可以用来匹配所有的域名 其他的字符,"-"和"!@#"也是可以的。注意,匹配所有域名的不能是"*"。 最佳实践 我们知道nginx是一个款高性能的web服务器,其设计充满了许多优化的技巧。在使用的时候也不例外,如果我们能对nginx的设计原理有一些了解,我们在配置时就能很好的利用这些设计,从而使得nginx的效率达到最大化。 前面提到,server_name的指令参数匹配有一定的匹配顺序,即最先匹配精确域名形式,然后匹配以通配符*开始的域名,其次匹配以通配符*结束的域名,最后是匹配正则形式。如果前面匹配到了,就会终止继续匹配。 从原理上说,这是因为,nginx会为每个监听的port分别维护精确域名,前向通配符和后项通配符的Hash表。Hash表能在nginx启动的配置阶段得到创建和优化。精确域名的Hash表首先被搜寻,如果找不到,前向通配Hash表会被接着被搜寻,如果也没有找到,那么后向通配Hash表会被搜寻。搜寻通配Hash表要比精确域名Hash表要慢,因为其是按照域名的部分来做搜寻的(比如,*.example.com,会搜寻example和com部分)。 值得注意的是:".example.org"被存在通配Hash表里面,并没有存在精确Hash表里面,因此匹配它是较慢的。 如果以上两种方式都还没有匹配上,那么最后轮到正则形式的指令上场了。正则形式的域名是按照先后顺序一个一个的去匹配的,没有存入任何Hash表,匹配到正确的就结束,因此,这是最慢的形式,没有任何“技巧”可言。 因此,最好的配置方式就是,尽可能使用精确域名,其次是通配符形式的,最后是正则形式。即便是正则形式域名,也要根据实际需要将用的最多的域名尽量前置。这样方可使得nginx的性能达到最大化。 例如: 这种方式要优于: 长域名,多域名的情况 在某些情况下,域名会非常的长,nginx不会允许其无限长,默认最大为32。在http上下文中,你可以通过server_names_hash_bucket_size指令来设置,可选参数有32,64(2的N次方)等 例如,如果域名被定义为:"too.long.server.name.example.org",超过32字符,那么会报错: could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 解决方式: 在另一些情况下,server_name配置的域名又很多,nginx同样可能报错: you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 32 这种情况下,先设置server_names_hash_max_size为一个接近你域名总数的一个合理值,如果这个还不管用,那么再调大server_names_hash_bucket_size的值(例如将2^N调整到2^(N+1)) 如果一个域名是某个监听端口下的唯一域名,那么nginx就不会建立Hash匹配表,也不会有上面介绍的那些匹配流程,然而,如果这个唯一的域名是一个捕获组正则表达式,那么nginx还是去尝试去解析正则表达式以提取这个字段。 相关推荐:
server {
server_name ~^(?<myname>.+)\.example\.cn$;
root /var/www/hb/$myname;
}
?<name>
?'name'
?P<name>
server {
server_name ~^(.+)\.example\.cn$;
root /var/www/hb/$1;
}
server {
listen 80;
server_name example.org www.example.org "";
...
}
server {
listen 80;
server_name example.org
www.example.org
""
192.168.1.1
;
...
}
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80;
server_name example.org www.example.org *.example.org;
...
}
server {
listen 80;
server_name .example.org;
...
}
http {
server_names_hash_bucket_size 64;
...
could not build the server_names_hash,http {
server_names_hash_max_size:600
server_names_hash_bucket_size 32;
...
위 내용은 Nginx 가상 서버 도메인 이름 구성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi

phpisusedforendingemailsduetoitsbuitsbuitsbuit-inmail () functionandsupportivelibraries lifephpmailerandswiftmailer.1) usethemail () functionforbasicemails, butithaslimitations.2) EmployPhpmailerforAdvancedFeatirehtMailsAndAtachments.3))

PHP 성능 병목 현상은 다음 단계를 통해 해결할 수 있습니다. 1) 성능 분석을 위해 Xdebug 또는 Blackfire를 사용하여 문제를 찾으십시오. 2) 데이터베이스 쿼리 최적화 및 APCU와 같은 캐시 사용; 3) Array_Filter와 같은 효율적인 기능을 사용하여 배열 작업을 최적화합니다. 4) 바이트 코드 캐시에 대한 OpCache 구성; 5) HTTP 요청을 줄이고 사진 최적화와 같은 프론트 엔드 최적화; 6) 지속적으로 모니터링하고 성능을 최적화합니다. 이러한 방법을 통해 PHP 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.

종속성 주사 (di) inphpisadesignpattern thatmanages 및 enpleducesclassdelencies, 향상 codemodularity, trestability 및 maintainability .itallowspassingDepporsingDikedAbaseConnectionStoclassesAssparameters, 촉진 이용성.

cachingimprovesphpperferferfermanceStoringResultsOfcomputationSorqueriesforquickRetrieval, retingServerloadandenhancancing responsetimestimes : 1) opcodecaching, opcodecaching, whitescompiledphps scriptsinmorytoskipcompileation; 2) dataCachingUsingmemmc


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기