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

Nginx - proxy_pass - конкретное место не работает

Я пытаюсь замаскировать удаленный URL-адрес с помощью Nginx с помощью proxy_pass

Я бы хотел загрузить staging.saas.localhost / _ когда URL-адрес браузера saas.localhost / uk_staging.

Почему-то расположение в saas.localhost не работает, и для того, чтобы не работать, я имею в виду, что местоположение, кажется, игнорируется.

saas.localhost / uk_staging обрабатывается приложением, а не из staging.saas.localhost / _мне кажется, что даже для saas.localhost / uk_staging используется местоположение ~ .php $

Я создал второй домен t.saas.localhost и он работает как ожидалось

В t.saas.localhost домен работает отлично.

t.saas.localhost / uk_staging показывает staging.saas.localhost / _ t.saas.localhost / something_else показывает google.co.uk/

Это моя текущая конфигурация Nginx:

server {
    listen 80;
    server_name   saas.localhost www.saas.localhost staging.saas.localhost;
    root /codebase/saas;
    index index.php index.html index.htm;

    location /uk_staging {
            #proxy_set_header Host $host;
            #proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://staging.saas.localhost/_;
    }

    if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?action=$1 last;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/tmp/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_read_timeout 600;
    }
}

server {
    listen 80;
    server_name  t.saas.localhost;
    root /codebase/saas;
    index index.php index.html index.htm;
    location /uk_staging {
            #proxy_set_header Host $host;
            #proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://staging.saas.localhost/_;
    }
    location / {
            #proxy_set_header Host $host;
            #proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://google.co.uk;
    }
}

Почему вы перенаправляетесь на тот же хостинг с proxy_pass директива ?!

Кроме того, nginx выбирает подходящее местоположение способом, которого вы, вероятно, не ожидали. Прочитайте это : Nginx rewite rules 403 ошибка.

Лучше не использовать if когда этого можно избежать.

server {
    listen 80;
    server_name   saas.localhost www.saas.localhost staging.saas.localhost;
    root /codebase/saas;
    index index.php index.html index.htm;

    location ^~ /uk_staging {
            #proxy_set_header Host $host;
            #proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://staging.saas.localhost/_; # What are you doing here ??!!
    }

    #avoid rewrite for static content
    location ~* \.(js|jpg|png|css|htm|html|gif|txt|swf|mpg|mp4|avi)$ {
            expires 30d;
    }


    location / {
        rewrite ^(.*)$ /index.php?action=$1 last;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/tmp/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_read_timeout 600;
    }
}