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前面不能加空格