У меня есть конкретный случай, когда я хочу перенаправить посетителей на сервер "prerender", когда я узнал, что посетитель является сканером (чтобы предоставить веб-сайт, оптимизированный для SEO), и к стандартному экземпляру php fast-cgi (через проход fastcgi) в противном случае.
Мой опыт работы с nginx очень ограничен, поэтому я не смог выполнить то, что мне нужно.
Вот черновик моей текущей конфигурации
server {
server_name example.com;
root /vagrant/example.com/web;
index app.php;
location /phpmyadmin {
root /usr/share;
index index.php;
location ~* \.php {
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
location / {
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}
location ~ ^/(app|app_dev)\.php(/|$) {
#if $prerender is 1 should use the prerender proxy
set $prerender 0;
if ($http_user_agent ~* "googlebot|pinterest|vkshare|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot") {
set $prerender 1;
}
if ($args ~ "_escaped_fragment_") {
set $prerender 1;
}
if ($http_user_agent ~ "Prerender") {
set $prerender 0;
}
proxy_set_header Authorization "Basic XXXXXXXXXXX"; #prerender server needs authentication
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
if ($prerender = 1) {
rewrite .* /$scheme://$host$request_uri? break;
proxy_pass http://localhost:3456;
break;
}
#otherwise should use the fastcgi proxy
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Обратите внимание, что в моей среде разработки у меня также есть блок местоположения для включения phpmyadmin. Предыдущая конфигурация не работает должным образом, потому что она всегда использует fastcgi_pass.
Любой совет?
Заранее спасибо.