http {
...
server {
listen 80; #nginx的端口
server_name localhost; #网站网址,这里以localhost为例
root /path/to/root; #根目录路径
chareset utf-8;
location /sf/ { #如果url匹配"/sf/"
alias /path/to/symfony/data/web/sf/; #访问/sf下面的资源所在的目录
}
location ~ ^/.+.php(/.*)?$ { #如果匹配类似/frontend_dev.php/*这样的
set $script $
fastcgi_script_name; #像/frontend_dev.php这样的url,直接把$fastcgi_script_name赋值给$script
if ($document_uri ~ ^(.+.php)(/.*)) { #如果又匹配/frontend_dev.php/article/1这样的
set $script $1; #把frontend_dev.php赋值给$script
set $path_info $2; #把/article/1赋值给$path_info,如果用nginx默认的配置,$_SERVER['path_info']会不正确而导致symfony找不到正确的路由
}
fastcgi_pass 127.0.0.1:9000; #php-cgi服务
#下面开始给php的$_SERVER相关变量赋值,不写对都有可能运行不了symfony
include fastcgi_params; #这里面有很多nginx默认给php的$_SERVER赋的
环境变量值,
#如果你想要把这句放后面的话,下面已经赋过值的记得注释掉,否则又被覆盖回原来的错误值
fastcgi_param SCRIPT_FILENAME $document_root$script;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param PATH_INFO $path_info;
fastcgi_param DOCUMENT_URI $document_uri;
}
location / { #当前面的规则都不匹配,就运行这个(剩下的url肯定都匹配/)
if (-f $request_filename) { #如果资源(像css,js这样的文件)和请求的url是匹配的,也就是说能根据url直接找到
expires max; #那就永不过期
break; #并且不往下执行了
}
#否则得话都给他rewrite到index.php上去
rewrite .* /index.php last;
}
}
}