location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
location /nav {
rewrite ^/nav(.*)$ https://tools.v235.top$1 permanent;
}
#302重定向
location / {
rewrite ^ https://tools.v235.top/nav/ permanent;
}
#301重定向
location / {
rewrite ^ https://tools.v235.top/nav/ redirect;
}
#403返回
location / {
return 403;
}
#404返回
location / {
return 404;
}
全部站点拦截配置到http块内server块外
拦截制定站点配置到站点server块内
deny 192.168.1.10;
deny 192.168.1.11;
deny 192.168.2.0/24;
.htaccess文件中直接配置
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^10\.0\. [OR]
RewriteCond %{REMOTE_ADDR} ^111\.222\.333\. [OR]
RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.
RewriteRule ^ - [F]
</IfModule>
try_files是nginx中http_core核心模块所带的指令,主要是能替代一些rewrite的指令,提高解析效率
try_files的语法规则:
格式1:try_files file ... uri;
格式2:try_files file ... =code;
可应用的上下文:server,location段
关键点1:按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理
关键点2:查找路径是按照给定的root或alias为根路径来查找的
关键点3:如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配
关键点4:如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码
常用配置举例如下:
location /images/ {
root /opt/html/;
try_files $uri $uri/ /images/default.gif;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location /dist/{
try_files $uri $uri/ /dist/index.html;
}
location / {
root $project_root/crmfrontend/web;
try_files $uri /crmfrontend/web/index.php?$args;
}
Nginx是一种高性能的Web服务器和反向代理服务器,它的配置语法非常强大和灵活,可以通过配置文件对Nginx服务器进行定制化的配置。其中,location指令是Nginx配置文件中最重要也是最常用的指令之一。 location指令的作用是根据请求URI的不同,将请求映射到不同的处理路径或处理方式。location指令的语法规则如下:
location [= | ~ | ~* | ^~ | !~ | !~*] /uri/ {
...
}
其中,=、^~、~、~、!~和!~是匹配操作符号,用于匹配URI;/uri/是需要匹配的URI,可以是一个普通的字符串,也可以是一个正则表达式;{ ... }中是具体的处理指令。 匹配操作符号的优先级如下:
在多个location配置的情况下,匹配顺序如下:
当有匹配成功时,按照当前匹配规则处理请求,只匹配一个location指令。 需要注意的是,location指令的匹配是基于请求URI而非请求URL的,请求URI是从请求URL中去除掉协议、域名、端口号和参数后的路径部分。同时,location指令的匹配规则是按照配置文件中的顺序进行匹配的,因此需要注意配置文件的顺序问题。 例如,以下是一个简单的Nginx配置示例:
server {
listen 80;
server_name example.com;
location = /index.html {
root /var/www/html;
}
location ^~ /static/ {
root /var/www;
}
location ~* \.(gif|jpg|jpeg)$ {
root /var/www/images;
}
location / {
proxy_pass http://localhost:8080;
}
}
在这个配置中,location = /index.html将匹配精确的/index.html请求;location ^~ /static/将匹配以/static/开头的所有请求;location ~* .(gif|jpg|jpeg)$将匹配所有以.gif、.jpg或.jpeg结尾的请求;而location /则将匹配所有其他请求,并通过反向代理将请求转发到本地8080端口的服务器上。 总之,location指令是Nginx配置文件中非常重要和灵活的指令之一,通过其灵活的匹配规则,可以对不同的请求URI进行不同的处理。同时,在配置location指令时,也需要注意匹配优先级和顺序的问题。
除了上述基本的语法规则和匹配顺序,还有一些额外的知识点和技巧可以帮助更好地理解和使用location指令。
除了精确匹配和以指定字符串开头的匹配,我们还可以使用正则表达式来匹配URI。在location指令中,可以使用~或~操作符来匹配正则表达式,其中~表示区分大小写的正则匹配,~表示不区分大小写的正则匹配。 例如,以下配置将匹配所有以.html结尾的URI:
location ~ \.html$ {
...
}
在location指令中,我们还可以使用变量来匹配URI。例如,以下配置将匹配所有以/user/开头,后面跟着任意字符的URI:
location ^~ /user/$user {
...
}
这里的$user是一个变量,在匹配时会被替换为实际的值。
当有多个location指令时,匹配顺序会影响到匹配的结果。为了提高匹配效率和减少冗余匹配,我们可以进行匹配顺序的优化。 例如,以下配置中,第一个location指令将匹配所有以/static/开头的URI,第二个location指令将匹配所有以/static/images/开头的URI,但是第二个location指令中的正则表达式也会匹配到第一个location指令中的URI,因此存在冗余匹配的问题:
location ^~ /static/ {
...
}
location ~* /static/images/.*\.(jpg|png|gif)$ {
...
}
为了避免冗余匹配,我们可以将第二个location指令中的正则表达式改成以^~操作符开头的精确匹配,将其放在第一个location指令之前,这样就可以避免冗余匹配了:
location ^~ /static/images/ {
...
}
location ^~ /static/ {
...
}
在Nginx中,我们可以使用try_files指令来实现404页面的定制,具体做法是在location / {} 中添加try_files指令,例如:
location / {
try_files $uri $uri/ /404.html;
}
这里的$uri表示请求的URI,$uri/表示请求的URI加上一个斜杠,/404.html表示404页面的路径。当请求的URI不存在时,Nginx会自动返回404页面。 总之,location指令是Nginx配置文件中非常重要和灵活的指令之一,除了基本的语法规则和匹配顺序外,我们还可以使用正则表达式、变量和优化匹配顺序等技巧来更好地使用location指令。同时,我们还可以通过try_files指令来实现404页面的定制。
在Nginx中,我们可以使用rewrite指令来重写URI,例如:
location / {
rewrite ^/users/(.*)$ /user?id=$1 last;
}
这里的^/users/(.)$表示匹配以/users/开头的URI,并将(.)部分作为参数传递给/user路径,其中$1表示正则表达式中第一个括号中匹配到的内容。last表示停止匹配,将请求发送到重写后的URI。
除了404页面外,我们还可以使用error_page指令来定制其他错误页面,例如:
location / {
error_page 500 502 503 504 /50x.html;
}
这里的500、502、503和504表示需要定制的错误代码,/50x.html表示定制的错误页面路径。
在Nginx中,我们可以使用alias指令来指定文件路径,例如:
location /static/ {
alias /var/www/static/;
}
这里的/var/www/static/表示文件的实际路径,Nginx会将请求映射到该路径下的文件。与root指令不同的是,alias指令可以指定任意路径作为文件路径,同时还可以使用正则表达式来匹配不同的URI。
在Nginx中,我们可以使用limit_req_zone指令来限制请求速率,例如:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5;
...
}
}
}
这里的$binary_remote_addr表示客户端的IP地址,one表示限制请求速率的名称,10m表示分配给该限制区的内存大小,1r/s表示每秒允许的请求速率。burst=5表示允许在限制时间内的突发请求次数。 总之,location指令是Nginx配置文件中非常重要和灵活的指令之一,通过正则表达式、变量、优化匹配顺序、重写URI、定制错误页面、指定文件路径和限制请求速率等技巧,我们可以更好地利用location指令来定制化Nginx服务器。