php 安装参数如:
- ./configure --prefix=/usr/local/php --enable-fastcgi --with-mysql=/usr/local/mysql --enable-zend-multibyte --with-config-file-path=/usr/local/php/conf --enable-discard-path --enable-force-cgi-redirect
启动php-cgi:
- /usr/local/php/bin/php-cgi -b 127.0.0.1:9000 &
nginx fastcgi 配置:/usr/local/nginx/conf/fastcgi_params
- fastcgi_param QUERY_STRING $query_string;
- fastcgi_param REQUEST_METHOD $request_method;
- fastcgi_param CONTENT_TYPE $content_type;
- fastcgi_param CONTENT_LENGTH $content_length;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param SCRIPT_NAME $fastcgi_script_name;
- fastcgi_param REQUEST_URI $request_uri;
- fastcgi_param DOCUMENT_URI $document_uri;
- fastcgi_param DOCUMENT_ROOT $document_root;
- fastcgi_param SERVER_PROTOCOL $server_protocol;
- fastcgi_param GATEWAY_INTERFACE CGI/1.1;
- fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
- 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;
- # PHP only, required if PHP was built with --enable-force-cgi-redirect
- fastcgi_param REDIRECT_STATUS 200;
基本上是官方自带的,我只加了 SCRIPT_FILENAME。
nginx 配置:
- server {
- listen 80;
- server_name www.example.com;
- access_log logs/example.access.log main;
- server_name_in_redirect off;
- root /home/www/wordpress;
- index index.php index.html index.htm;
- location / {
- try_files $uri $uri/ /index.php?q=$uri&$args;
- }
- location ~ \.php$ {
- include fastcgi_params;
- fastcgi_pass 127.0.0.1:9000;
- }
- }
用 try_files 太简单了。都不用 rewrite 规则。
测试过可行的。
延伸:当然在生产环境像上面简单地用 php-cgi 是不行的。我用 spawn-fcgi 管理 php-cgi。