解决nginx+php二级页面显示空白的问题
遷移官網(wǎng)商城的發(fā)現(xiàn)主頁的二級界面顯示空白頁,此https商城網(wǎng)站
后修改nginx配置,顯示正常
添加
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
這個配置的意思是 在瀏覽器中訪問的.php文件,實(shí)際讀取的是?$document_root(網(wǎng)站根目錄)下的.php文件 -- 也就是說當(dāng)訪問127.0.0.1/index.php的時候,需要讀取網(wǎng)站根目錄下面的index.php文件,如果沒有配置這一配置項(xiàng)時,nginx不回去網(wǎng)站根目錄下訪問.php文件,所以返回空白
?
nginx+php四個常見、重要的配置項(xiàng)
fastcgi_pass
作用:nginx本身不處理php請求,配置文件中將.php結(jié)尾的請求通過FashCGI交給PHP-FPM處理,PHP-FPM是PHP的一個FastCGI管理器
作用域:location, if in location設(shè)置FastCGI服務(wù),其值可以是一個域名、IP地址:端口、或者是一個Unix的Socket文件。
Nginx連接fastcgi的方式有2種:TCP和unix domain socket
TCP是使用TCP端口連接127.0.0.1:9000
Socket是使用unix domain socket連接套接字/dev/shm/php-cgi.sock(很多教程使用路徑/tmp,而路徑/dev/shm是個tmpfs,速度比磁盤快得多)
# TCP形式傳遞 fastcgi_pass localhost:9000;# Socket形式傳遞 fastcgi_pass unix:/tmp/fastcgi.socket;# 傳遞給集群 upstream cloud {server cgi_1.cloud.com;server cgi_2.cloud.com; } fastcgi_pass cloud;
fastcgi_param
作用域:http, server, location設(shè)置一個傳遞給FastCGI服務(wù)的參數(shù),可以是文本或者是變量。
# 例如在接入層Nginx上面?zhèn)鬟f如下5個參數(shù) fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;# 那么在FastCGI上面,例如PHP-CGI上面就可以通過$_SERVER這個超全局變量獲取。 $_SERVER['REMOTE_ADDR'] $_SERVER['REMOTE_PORT'] $_SERVER['SERVER_ADDR'] $_SERVER['SERVER_PORT'] $_SERVER['SERVER_NAME']fastcgi_param 文件詳解 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#腳本文件請求的路徑,也就是說當(dāng)訪問127.0.0.1/index.php的時候,需要讀取網(wǎng)站根目錄下面的index.php文件,如果沒有配置這一配置項(xiàng)時,nginx不回去網(wǎng)站根目錄下訪問.php文件,所以返回空白 fastcgi_param QUERY_STRING $query_string; #請求的參數(shù);如?app=123 fastcgi_param REQUEST_METHOD $request_method; #請求的動作(GET,POST) fastcgi_param CONTENT_TYPE $content_type; #請求頭中的Content-Type字段 fastcgi_param CONTENT_LENGTH $content_length; #請求頭中的Content-length字段。fastcgi_param SCRIPT_NAME $fastcgi_script_name; #腳本名稱 fastcgi_param REQUEST_URI $request_uri; #請求的地址不帶參數(shù) fastcgi_param DOCUMENT_URI $document_uri; #與$uri相同。 fastcgi_param DOCUMENT_ROOT $document_root; #網(wǎng)站的根目錄。在server配置中root指令中指定的值 fastcgi_param SERVER_PROTOCOL $server_protocol; #請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。fastcgi_param GATEWAY_INTERFACE CGI/1.1; #cgi 版本 fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; #nginx 版本號,可修改、隱藏fastcgi_param REMOTE_ADDR $remote_addr; #客戶端IP fastcgi_param REMOTE_PORT $remote_port; #客戶端端口 fastcgi_param SERVER_ADDR $server_addr; #服務(wù)器IP地址 fastcgi_param SERVER_PORT $server_port; #服務(wù)器端口 fastcgi_param SERVER_NAME $server_name; #服務(wù)器名,域名在server配置中指定的server_namefastcgi_param PATH_INFO $path_info; #可自定義變量-- PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
fastcgi_index
作用域:http, server, location當(dāng)請求以/結(jié)尾的時候,會將請求傳遞給所設(shè)置的index.php文件處理。
fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;fastcgi_split_path_info
作用域:locationNginx默認(rèn)獲取不到PATH_INFO的值,得通過fastcgi_split_path_info指定定義的正則表達(dá)式來給$fastcgi_path_info賦值。
?目的:讓php能夠解析類似這樣的url?http://www.xxx.com/index.php/abc/def
在默認(rèn)情況下我們打開這個url時會出現(xiàn)無法找到該頁。這就需要在nginx做path_info設(shè)置了。
原理:把index.php做為php執(zhí)行的腳本,把/abc/def做為參數(shù)傳給php-cgi執(zhí)行。
實(shí)現(xiàn):nginx版本0.7.31以上支持fastcgi_split_path_info,這個指令可以設(shè)置SCRIPT_FILENAME和PATH_INFO的變量,用正則表達(dá)式將這兩部分分開.
例子:我們在nginx配置文件"local"區(qū)塊中加入以下代碼。
?
location ~ [^/]\.php(/|$) { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }重啟nginx服務(wù) /usr/local/nginx/sbin/nginx -s reload當(dāng)nginx處理http://www.xxx.com/index.php/abc/def請求時,將會把"index.php"做為php的腳本,/abc/def做為index.php腳本的參數(shù)提交給php-cgi執(zhí)行。
?
轉(zhuǎn)載于:https://www.cnblogs.com/jimmy-xuli/p/9015639.html
總結(jié)
以上是生活随笔為你收集整理的解决nginx+php二级页面显示空白的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django视图
- 下一篇: tomcat server.xml各个端