如何在nginx中为单个文件创build位置块,但除了它自己之外,是否遵循另一个位置块的规则?

我有一个位置块/做所有我的fastcgi的东西,它有一个10秒的正常超时。 我希望能够对某些文件(/ admin,sitemap.xml)有不同的超时时间。 有没有简单的方法来做到这一点,而不是复制每个位置的整个位置块?

location /admin{ fastcgi_read_timeout 5m; #also use the location info below. } location /sitemap.xml{ fastcgi_read_timeout 5m; #also use the location info below. } location / { fastcgi_pass 127.0.0.1:8014; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for; } 

我认为有两种可能性,其中第二种是最灵活的。

1

你可以尝试:

 location /admin{ fastcgi_read_timeout 5m; include snippets/location.fcgi.conf; } location /sitemap.xml{ fastcgi_read_timeout 5m; include snippets/location.fcgi.conf; } 

文件snippets/location.fcgi.conf (不需要位置块):

 fastcgi_pass 127.0.0.1:8014; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; # ... 

2

或者我想你可以这样下去。

 location / { # set you default, so we don't bomb out set $timeout 2s; # your other general stuff } location /sitemap.xml{ set $timeout 5m; include snippets/location.fcgi.conf; } location /admin{ fastcgi_read_timeout 5m; include snippets/location.fcgi.conf; } 

注意:所有包含path总是相对于Nginx主configuration文件夹。
是的,只要你有一个符号链接,你可以把它们放在任何你想要的地方。

您不能在位置块之间inheritance,但是您可以使用include指令将所有通用configuration指令放在一个文件中,然后将其包含在每个位置中。