Nginx 位置块匹配规则
Nginx location block matching rule
我是 nginx 服务器的新手。
我要将 php 框架(例如 codeigniter)部署到 nginx 服务器。
我的配置文件如下。
server {
index index.html index.php index.htm;
# set expiration of assets to MAX for caching
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}
location / {
# Check if a file exists, or route it to index.php.
try_files $uri $uri/ /index.php;
}
location ~* \.php$ {
fastcgi_pass unix:/var/run/php/php7-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
我的问题如下
1)请求uri是这样的"www.domain.com/controllername/functionname/param1/param2/"
nginx 如何与这个 url 一起工作?
2)第三个location块匹配正则表达式“.php$”.
仅当 uri 以“.php”结尾时才会如此吗?
(我想是的,但是那个块的 fastcgi_split_path_info 有不同的正则表达式。)
问题 1) 是的,这应该可行,因为行
try_files $uri $uri/ /index.php;
一个请求一个一个处理。首先 nginx 尝试查找 URI 描述的文件,如果没有匹配,则检查它是否是一个目录。如果不是,它会调用您的 index.php 文件。原始 URI 与许多其他 HTTP_REQUEST 变量一起移交,如果您配置(codeigniter 是正确的),codeigniter 的代码负责解析 url。
codeigniter 的调用约定是 "www.domain.com/controllername/public_function/param1/param2/"
所以通常你不会给出视图名称,而是在你的 URI 中给出控制器和函数名称。
问题2)"location"指令只使用URI路径,没有任何GET参数。 split_path 工作方式不同,因此需要不同的正则表达式。
我是 nginx 服务器的新手。
我要将 php 框架(例如 codeigniter)部署到 nginx 服务器。
我的配置文件如下。
server {
index index.html index.php index.htm;
# set expiration of assets to MAX for caching
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}
location / {
# Check if a file exists, or route it to index.php.
try_files $uri $uri/ /index.php;
}
location ~* \.php$ {
fastcgi_pass unix:/var/run/php/php7-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
我的问题如下
1)请求uri是这样的"www.domain.com/controllername/functionname/param1/param2/"
nginx 如何与这个 url 一起工作?
2)第三个location块匹配正则表达式“.php$”.
仅当 uri 以“.php”结尾时才会如此吗?
(我想是的,但是那个块的 fastcgi_split_path_info 有不同的正则表达式。)
问题 1) 是的,这应该可行,因为行
try_files $uri $uri/ /index.php;
一个请求一个一个处理。首先 nginx 尝试查找 URI 描述的文件,如果没有匹配,则检查它是否是一个目录。如果不是,它会调用您的 index.php 文件。原始 URI 与许多其他 HTTP_REQUEST 变量一起移交,如果您配置(codeigniter 是正确的),codeigniter 的代码负责解析 url。 codeigniter 的调用约定是 "www.domain.com/controllername/public_function/param1/param2/" 所以通常你不会给出视图名称,而是在你的 URI 中给出控制器和函数名称。
问题2)"location"指令只使用URI路径,没有任何GET参数。 split_path 工作方式不同,因此需要不同的正则表达式。