nginx 上部署 wordpress

自己有个 vps,web 服务器安装 nginx。现在帮同事搞个 blog(自己的 blog 还没挂到 vps 上呢)。要支持 php,还不知道 wordpress rewrite 规则,所以自己的blog没搬过去就是因为这个原因。

vps 上也装有 lighttpd,搞了一个晚上 lighttpd 还没安装上 wordpress 放弃。改用 nginx(反正 lighttpd 支持的 php 也是通过 nginx 代理过去,干脆用nginx 支持php 行了 )。

php 安装参数如:

  1. ./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:

  1. /usr/local/php/bin/php-cgi -b 127.0.0.1:9000 &

nginx fastcgi 配置:/usr/local/nginx/conf/fastcgi_params

  1. fastcgi_param QUERY_STRING $query_string;
  2. fastcgi_param REQUEST_METHOD $request_method;
  3. fastcgi_param CONTENT_TYPE $content_type;
  4. fastcgi_param CONTENT_LENGTH $content_length;
  5. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  6. fastcgi_param SCRIPT_NAME $fastcgi_script_name;
  7. fastcgi_param REQUEST_URI $request_uri;
  8. fastcgi_param DOCUMENT_URI $document_uri;
  9. fastcgi_param DOCUMENT_ROOT $document_root;
  10. fastcgi_param SERVER_PROTOCOL $server_protocol;
  11. fastcgi_param GATEWAY_INTERFACE CGI/1.1;
  12. fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
  13. fastcgi_param REMOTE_ADDR $remote_addr;
  14. fastcgi_param REMOTE_PORT $remote_port;
  15. fastcgi_param SERVER_ADDR $server_addr;
  16. fastcgi_param SERVER_PORT $server_port;
  17. fastcgi_param SERVER_NAME $server_name;
  18. # PHP only, required if PHP was built with --enable-force-cgi-redirect
  19. fastcgi_param REDIRECT_STATUS 200;

基本上是官方自带的,我只加了 SCRIPT_FILENAME。

nginx 配置:

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4. access_log logs/example.access.log main;
  5. server_name_in_redirect off;
  6. root /home/www/wordpress;
  7. index index.php index.html index.htm;
  8. location / {
  9. try_files $uri $uri/ /index.php?q=$uri&$args;
  10. }
  11. location ~ \.php$ {
  12. include fastcgi_params;
  13. fastcgi_pass 127.0.0.1:9000;
  14. }
  15. }

用 try_files 太简单了。都不用 rewrite 规则。

测试过可行的。

延伸:当然在生产环境像上面简单地用 php-cgi 是不行的。我用 spawn-fcgi 管理 php-cgi。