Tutorial de configuração de caminho estático do Nginx

Instruções de configuração para recursos estáticos do Nginx

comando de escuta

listen: Usado para configurar a porta de escuta.

gramática

endereço de escuta[:porta] [servidor_padrão]...; porta de escuta [default_server]...;

Padrões

ouvir *:80 | *:8000

Localização

servidor

A configuração de escuta é mais flexível. Vamos nos familiarizar com os métodos de configuração comumente usados ​​por meio de alguns exemplos:

listen 127.0.0.1:8000; // listen localhost:8000 escuta o IP e a porta especificados

listen 127.0.0.1; Escuta todas as portas do IP especificado

escuta 8000; escuta as conexões na porta especificada

listen *:8000; Escuta as conexões na porta especificada

O atributo default_server é um identificador usado para definir esse host virtual como o host padrão. O chamado host padrão significa que, se o endereço:porta correspondente não corresponder, ele será executado por padrão. Se não for especificado, o primeiro servidor será usado por padrão.

server{
	listen 8080;
	server_name 127.0.0.1;
	location /{
		root html;
		index index.html;
	}}
server{
	listen 8080 default_server;
	server_name localhost;
	default_type text/plain;
	return444'This is a error request';}

diretiva server_name

server_name: usado para definir o nome do serviço do host virtual.

127.0.0.1, localhost, nome de domínio [ www.baidu.com | www.jd.com ]

gramática

server_name nome ...; nome pode fornecer vários meios separados por espaços

Padrões

nome do servidor "";

Localização

servidor

Existem três maneiras de configurar server_name, a saber:

· Combinação exata

· Correspondência de curinga

· Correspondência de expressão regular

Método de configuração 1: correspondência exata

como

server {
	listen 80;
	server_name www.itcast.cn www.itheima.cn;
	...}

Pontos de conhecimento suplementares:

hosts é um arquivo de sistema sem extensão, que pode ser aberto com o bloco de notas e outras ferramentas. Sua função é estabelecer uma associação "banco de dados" entre alguns nomes de domínio de sites comumente usados ​​e seus endereços IP correspondentes. Ao inserir uma URL, o sistema primeiro procure automaticamente o endereço IP correspondente no arquivo hosts. Uma vez encontrado, o sistema abrirá imediatamente a página da Web correspondente. Se não for encontrado, o sistema enviará a URL ao servidor de resolução de nome de domínio DNS para resolução de endereço IP.

windows:C:\Windows\System32\drivers\etc

centos:/etc/hosts

Como o nome de domínio cobra uma determinada taxa, podemos modificar o arquivo hosts para criar alguns nomes de domínio virtuais para uso. Você precisa modificar o arquivo /etc/hosts para adicionar

vim /etc/hosts
127.0.0.1 www.itcast.cn
127.0.0.1 www.itheima.cn

Método de configuração 2: use a configuração curinga

O curinga "*" é suportado em server_name, mas deve-se observar que o curinga não pode aparecer no meio do nome do domínio e só pode aparecer no primeiro ou no último parágrafo, como:

server {
	listen 80;
	server_name  *.itcast.cn	www.itheima.*;
	# www.itcast.cn abc.itcast.cn www.itheima.cn www.itheima.com
	...}

A configuração a seguir relatará um erro

server {
	listen 80;
	server_name  www.*.cn www.itheima.c*
	...}

Configuração 3: Use configuração de expressão regular

As expressões regulares podem ser usadas em server_name e ~ é usado como o início da string de expressão regular.

expressões regulares comuns

o código

ilustrar

^

corresponder ao início da string de pesquisa

$

corresponde ao final da string de pesquisa

.

corresponde a qualquer caractere único, exceto nova linha \n

\

Caractere de escape para marcar o próximo caractere como especial

[xyz]

Conjunto de caracteres, corresponde a qualquer caractere especificado

[az]

intervalo de caracteres, corresponde a qualquer caractere no intervalo especificado

\c

Corresponde a qualquer um dos seguintes caracteres AZ az 0-9 e sublinhado, equivalente a [A-Za-z0-9_]

\d

Correspondência de caractere de dígito, equivalente a [0-9]

{n}

corresponde exatamente n vezes

{n,}

corresponder pelo menos n vezes

{n,m}

Corresponde pelo menos n vezes e no máximo m vezes

*

Zero ou mais vezes, equivalente a {0,}

+

Uma ou mais vezes, equivalente a {1,}

?

zero ou uma vez, equivalente a {0,1}

A configuração é a seguinte:

server{
        listen 80;
        server_name ~^www\.(\w+)\.com$;
        default_type text/plain;return200 $1  $2..;}

Observação ~ nenhum espaço pode ser adicionado depois e os colchetes podem receber valores

Correspondência de ordem de execução

Como a diretiva server_name oferece suporte a curingas e expressões regulares, em um arquivo de configuração contendo vários hosts virtuais, um nome pode ser correspondido com sucesso pelo server_name de vários hosts virtuais. Quando isso acontece, para quem é a solicitação atual?

server{
	listen 80;
	server_name ~^www\.\w+\.com$;
	default_type text/plain;
	return200'regex_success';}

server{
	listen 80;
	server_name www.itheima.*;
	default_type text/plain;
	return200'wildcard_after_success';}

server{
	listen 80;
	server_name *.itheima.com;
	default_type text/plain;
	return200'wildcard_before_success';}

server{
	listen 80;
	server_name www.itheima.com;
	default_type text/plain;
	return200'exact_success';}

server{
	listen 80 default_server;
	server_name _;
	default_type text/plain;
	return444'default_server not found server';}

para concluir:

exact_success
wildcard_before_success
wildcard_after_success
regex_success
default_server not found server!!

No1: Corresponde exatamente ao server_name

No2: O curinga corresponde ao server_name com sucesso no início

No3:通配符在结束时匹配server_name成功

No4:正则表达式匹配server_name成功

No5:被默认的default_server处理,如果没有指定默认找第一个server

location指令

server{
	listen 80;
	server_name localhost;
	location /{
	
	}
	location /abc{
	
	}
	...}

location:用来设置请求的URI

默认值

语法

location [ = | ~ | ~* | ^~ |@ ] uri{...}

位置

server,location

uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求。

属性介绍:

不带符号,要求必须以指定模式开始

server {
	listen 80;
	server_name 127.0.0.1;
	location /abc{
		default_type text/plain;
		return200"access success";
	}}
以下访问都是正确的
http://192.168.200.133/abc
http://192.168.200.133/abc?p1=TOM
http://192.168.200.133/abc/
http://192.168.200.133/abcdef

= : 用于不包含正则表达式的uri前,必须与指定的模式精确匹配

server {
	listen 80;
	server_name 127.0.0.1;
	location =/abc{
		default_type text/plain;
		return200"access success";
	}}
可以匹配到
http://192.168.200.133/abc
http://192.168.200.133/abc?p1=TOM
匹配不到
http://192.168.200.133/abc/
http://192.168.200.133/abcdef

~ : 用于表示当前uri中包含了正则表达式,并且区分大小写

~*: 用于表示当前uri中包含了正则表达式,并且不区分大小写

换句话说,如果uri包含了正则表达式,需要用上述两个符合来标识

server {
	listen 80;
	server_name 127.0.0.1;
	location ~^/abc\w${
		default_type text/plain;
		return200"access success";
	}}
server {
	listen 80;
	server_name 127.0.0.1;
	location ~*^/abc\w${
		default_type text/plain;
		return200"access success";
	}}

^~: 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。

server {
	listen 80;
	server_name 127.0.0.1;
	location ^~/abc{
		default_type text/plain;
		return200"access success";
	}}

设置请求资源的目录root / alias

root:设置请求的根目录

语法

root path;

默认值

root html;

位置

http、server、location

path为Nginx服务器接收到请求以后查找资源的根目录路径。

alias:用来更改location的URI

语法

alias path;

默认值

位置

location

path为修改后的根路径。

以上两个指令都可以来指定访问资源的路径,那么这两者之间的区别是什么?

举例说明:

(1)在/usr/local/nginx/html目录下创建一个 images目录,并在目录下放入一张图片mv.png图片

location /images {
	root /usr/local/nginx/html;}

访问图片的路径为:

http://192.168.200.133/images/mv.png

(2)如果把root改为alias

location /images {
	alias /usr/local/nginx/html;}

再次访问上述地址,页面会出现404的错误,查看错误日志会发现是因为地址不对,所以验证了:

root的处理结果是: root路径+location路径
/usr/local/nginx/html/images/mv.png
alias的处理结果是:使用alias路径替换location路径
/usr/local/nginx/html/images

需要在alias后面路径改为

location /images {
	alias /usr/local/nginx/html/images;}

(3)如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求

将上述配置修改为

location /images/{
	alias /usr/local/nginx/html/images;}

访问就会出问题,查看错误日志还是路径不对,所以需要把alias后面加上 /

小结:

root的处理结果是: root路径+location路径

alias的处理结果是:使用alias路径替换location路径

alias是一个目录别名的定义,root则是最上层目录的含义。

如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求

index指令

index:设置网站的默认首页

语法

index file ...;

默认值

index index.html;

位置

http、server、location

index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会依次进行查找,找到第一个为止。

举例说明:

location /{
	root /usr/local/nginx/html;
	index index.html index.htm;}
访问该location的时候,可以通过 http://ip:port/,地址后面如果不添加任何内容,则默认依次访问index.html和index.htm,找到第一个来进行返回

error_page指令

error_page:设置网站的错误页面

语法

error_page code ... [=[response]] uri;

默认值

位置

http、server、location......

当出现对应的响应code后,如何来处理。

举例说明:

(1)可以指定具体跳转的地址

server {
	error_page 404 http://www.itcast.cn;}

(2)可以指定重定向地址

server{
	error_page 404/50x.html;
	error_page 500502503504/50x.html;
	location =/50x.html{
		root html;
	}}

(3)使用location的@符合完成错误信息展示

server{
	error_page 404@jump_to_error;
	location @jump_to_error{
		default_type text/plain;
		return404'Not Found Page...';
	}}

可选项=[response]的作用是用来将相应代码更改为另外一个

server{
	error_page 404=200/50x.html;
	location =/50x.html{
		root html;
	}}

这样的话,当返回404找不到对应的资源的时候,在浏览器上可以看到,最终返回的状态码是200,这块需要注意下,编写error_page后面的内容,404后面需要加空格,200前面不能加空格

おすすめ

転載: blog.csdn.net/Blue92120/article/details/129145697