一、Nginx安装
安装时注意加上 –with-http_ssl_module,http_ssl_module不属于Nginx的基本模块。
Nginx安装方法:
make && make install
二、生成证书(略)
可以使用openssl或ca.ssl生成,结果生成如下两个文件:
server.crt
server.key
如果是apache,直接将这两个文件引入到httpd.conf中,而Nginx需要的是.pem文件。.pem的生成方法很简单,就是合并server.crt、server.key的内容。
三、修改Nginx配置:
{
listen 443;
server_name test.sina.com.cn;
ssl on;
ssl_certificate /tmp/server.pem;
ssl_certificate_key /tmp/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
}
到此,完成了nginx中https的简单配置,更为复杂的ssl配置,请查阅更多资料。
介绍:
配置的重点在server这个node上,其他用nginx默认配置就行,这里就只写出server那一块的配置。因为symfony需要一些php $_SERVER里的变量来做路由,但是nginx赋给php的$_SERVER值并不是完全正确的,我也是查了不少资料才调好的,希望能对想让symfony在nginx上跑的同学有所帮助。
...
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;
}
}
}
在nginx.conf中加入如下配置:
server {
listen 80;
server_name yourservername;
location / {
root /your/root/path/;
index index.php index.html index.htm;
if (-f $request_filename) {
expires max;
break;
}
#if (!-e $request_filename) {
# rewrite ^/(.*)$ /index.php/$1 last;
#}
if ($request_filename !~ (js|css|images|robots/.txt|index/.php.*) ) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php($|/) {
root /your/root/path;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
}
}
然后,在codeigniter项目的application/config/config.php中配置$config['index_page'] = '';,刷新页面即可看到修改后的效果。