thinkphp5部署nginx服务上多站点解决方案!
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
問題簡(jiǎn)述:thinkphp5怎么在url訪問中去掉public。
實(shí)驗(yàn)環(huán)境: Linux、nginx、mysql、php(lnmp一鍵集成1.4測(cè)試版,更多信息lnmp.org) 本文兼顧的問題: 1.安全的配置(同一vps多站點(diǎn)) 2.友好的站點(diǎn)入口 部署問題重述: 由于thinkphp5經(jīng)過重構(gòu),和thinkphp3.2有很大的不同,其中之前的入口文件index.php由/index.php改為/public/index.php, 那么問題來了: 1.如果按lnmp集成環(huán)境提供的方法(lnmp vhost add)添加虛擬站點(diǎn),訪問站點(diǎn)就要加個(gè)二級(jí)目錄,如 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環(huán)境考慮到虛擬站點(diǎn)各自的訪問目錄權(quán)限問題,于是在/usr/local/nginx/conf/fastcgi.conf 里配置了
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 那么每個(gè)站點(diǎn)的訪問權(quán)限就限制在各自的document_root里了, 于是,我們修改的root(root /home/wwwroot/xxx.com/public;)就把權(quán)限限制在public目錄之后, 軟件架構(gòu)根目錄下的application等都無法訪問了,那么此時(shí)我們要解決的問題是: 2.既要保持root /home/wwwroot/xxx.com/public;,又要讓虛擬站點(diǎn)有/home/wwwroot/xxx.com目錄的訪問權(quán)限, 那么可以修改/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是公共配置文件,采用這種寫死的方式會(huì)導(dǎo)致其他站點(diǎn)不可用, 為了兼顧其他虛擬站點(diǎn),if_not_empty派上用場(chǎng)了, 修改方法為: 不改變/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/"; 優(yōu)點(diǎn):這樣既滿足了thinkphp5的部署要求,又不影響其他一般站點(diǎn)的使用。 缺點(diǎn):如果$basedir沒有賦值(至少一個(gè)專屬配置有賦值),nginx -t無法通過。
注意rewrite規(guī)則: 最后獻(xiàn)上thinkphp的rewrite規(guī)則: 這種寫法3.2是可以的,但在這里是不可以的,否則經(jīng)測(cè)試pathinfo為空
location / { try_files $uri $uri/ /index.php?$query_string; } 應(yīng)該改為:
location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?s=/$1 last; } } 好了,一篇關(guān)于thinkphp5的rewrite寫到這,歡迎多多交流
總結(jié):
lnmp環(huán)境 thinkphp框架不改變目錄結(jié)構(gòu)的情況下配置rewrite規(guī)則 Linux權(quán)限,安全問題 參考資料: http://www.kancloud.cn/manual/thinkphp5/207415 http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
轉(zhuǎn)載于:https://my.oschina.net/ShangDev/blog/849415
總結(jié)
以上是生活随笔為你收集整理的thinkphp5部署nginx服务上多站点解决方案!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何学习Python课程
- 下一篇: 在Windows 64位下为PHP5.6