Nginx reverse proxy and subdomains

Привет,

Наскоро ми се наложи да търся решение за използване на Nginx като reverse proxy със субдомейни.

Nginx reverse proxy and subdomains

Идеята беше следната :

Имаме сайт : testsait.com който се намира на един сървър с nginx и wordpress блог на адрес : blog.testsait.com който се намира на друг сървър.

Целта е да направим testsait.com/blog да се отваря директно през blog.testsait.com.
Всичко това е с цел по-добро SEO, или поне нашите SEO гурута смятат така 😀 хаха.

Ето и начина по който се прави това:

Във виртуалният хост на сайта ни testsait.com се добавя следното :

location /blog/ {
rewrite ^/blog/(.*) /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90;
proxy_pass http://blog.testsait.com/;
proxy_redirect http://blog.testsait.com/ /blog/;
}

Този блок се добавя преди: location /

Така направено всичко ще работи, освен wp-login.php. Причината е заради location ~ \.php$ {

За това този location блок се заменя със следния :

location ~* ^((?!\/blog)(.+)\.php)$ {

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_max_temp_file_size 0;
client_max_body_size 32M;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_read_timeout 240;
#add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
fastcgi_param SCRIPT_FILENAME /var/www/testsait.com/$fastcgi_script_name;
}

Така всички php заявки ще бъват насочени към php-fpm socket-а освен /blog/.

Резултата е работещ testsait.com/blog и testsait.com/blog/wp-login.php.

Това е!