Назад | Перейти на главную страницу

Настройте nginx для прохождения прокси при возникновении некоторых условий или использовать php fastcgi в противном случае

У меня есть конкретный случай, когда я хочу перенаправить посетителей на сервер "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.

Любой совет?

Заранее спасибо.