osx에 nginx를 세팅하고 virtual host로 로컬 도메인을 세팅해 주고 워드프레스를 사용할때 아래와 같은 식으로 virtual host를 세팅해주었다.

server {
  listen 80;
  server_name echo.dev;
  root  /Users/ray/Sites/USER/echo/public_html;
  index  index.php index.html index.htm;
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
    location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
    }
  location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; log_not_found off; expires max;
  }
}

이 때 워드프레스를 http://hostname/wordpress 에 설치하고 Site Address를 http://hostname/ WordPress Address를 http://hostname/wordpress 로 이용할 수 있다. (index.php를 / 에 옮기는 작업이 필요) 이렇게 하면 Permalink Settings에서 Post name을 쓰는 것도 문제가 없다.

문제는 WordPress Address를 / 로 바꾸지 않고 그대로 /wordpress 로 사용할 때 문제가 된다. 이 때 아래와 같이 location을 더해주면 문제가 해결된다.

    location /wordpress/ {
    try_files $uri $uri/ /wordpress/index.php?$args;
    }

최종적인 config 모습.

server {
  listen 80;
  server_name echo.dev;
  root  /Users/ray/Sites/USER/echo/public_html;
  index  index.php index.html index.htm;
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
    location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
    }
    location /wordpress/ {
    try_files $uri $uri/ /wordpress/index.php?$args;
    }
  location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; log_not_found off; expires max;
  }
}
Tags : #wordpress