thinkphp5部署nginx服务上多站点解决方案!
2019獨角獸企業重金招聘Python工程師標準>>>
問題簡述:thinkphp5怎么在url訪問中去掉public。
實驗環境: Linux、nginx、mysql、php(lnmp一鍵集成1.4測試版,更多信息lnmp.org) 本文兼顧的問題: 1.安全的配置(同一vps多站點) 2.友好的站點入口 部署問題重述: 由于thinkphp5經過重構,和thinkphp3.2有很大的不同,其中之前的入口文件index.php由/index.php改為/public/index.php, 那么問題來了: 1.如果按lnmp集成環境提供的方法(lnmp vhost add)添加虛擬站點,訪問站點就要加個二級目錄,如 http://xxx.com/public
所以為了可以讓訪問鏈接變得更加友好(即http://xxx.com),可以修改/usr/local/nginx/conf/vhost/xxx.com.conf(下稱“專屬配置”)
root /home/wwwroot/xxx.com/; 改為:
root /home/wwwroot/xxx.com/public; 那么問題來了,由于lnmp環境考慮到虛擬站點各自的訪問目錄權限問題,于是在/usr/local/nginx/conf/fastcgi.conf 里配置了
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 那么每個站點的訪問權限就限制在各自的document_root里了, 于是,我們修改的root(root /home/wwwroot/xxx.com/public;)就把權限限制在public目錄之后, 軟件架構根目錄下的application等都無法訪問了,那么此時我們要解決的問題是: 2.既要保持root /home/wwwroot/xxx.com/public;,又要讓虛擬站點有/home/wwwroot/xxx.com目錄的訪問權限, 那么可以修改/usr/local/nginx/conf/fastcgi.conf配置文件:
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 改為:
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/xxx.com/:/tmp/:/proc/"; 但問題來了,/usr/local/nginx/conf/fastcgi.conf是公共配置文件,采用這種寫死的方式會導致其他站點不可用, 為了兼顧其他虛擬站點,if_not_empty派上用場了, 修改方法為: 不改變/usr/local/nginx/conf/fastcgi.conf配置文件里的原配置,而在
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 之后添加
fastcgi_param PHP_ADMIN_VALUE $basedir if_not_empty;#注意nginx要在1.1.11版本之后 $basedir變量就可以在/usr/local/nginx/conf/vhost/xxx.com.conf配置文件里的include enable-php.conf前賦值:
set $basedir "open_basedir=/home/wwwroot/dev.yunshare.net/:/tmp/:/proc/"; 優點:這樣既滿足了thinkphp5的部署要求,又不影響其他一般站點的使用。 缺點:如果$basedir沒有賦值(至少一個專屬配置有賦值),nginx -t無法通過。
注意rewrite規則: 最后獻上thinkphp的rewrite規則: 這種寫法3.2是可以的,但在這里是不可以的,否則經測試pathinfo為空
location / { try_files $uri $uri/ /index.php?$query_string; } 應該改為:
location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?s=/$1 last; } } 好了,一篇關于thinkphp5的rewrite寫到這,歡迎多多交流
總結:
lnmp環境 thinkphp框架不改變目錄結構的情況下配置rewrite規則 Linux權限,安全問題 參考資料: http://www.kancloud.cn/manual/thinkphp5/207415 http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
轉載于:https://my.oschina.net/ShangDev/blog/849415
總結
以上是生活随笔為你收集整理的thinkphp5部署nginx服务上多站点解决方案!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何学习Python课程
- 下一篇: 网页设计制作必须知道的10个秘诀