порт_ин_redirect Nginx не работает?

#nginx #varnish

#nginx #varnish

Вопрос:

Недавно я настроил сервер Nginx для размещения установки WordPress и использую Varnish в качестве обратного прокси-сервера перед сервером. Varnish запущен на порту 80, поэтому я настроил Nginx на прослушивание 80 и перенаправление. К сожалению, при перенаправлении к запросу nginx добавляется порт 8080.

Включение port_in_redirect off кажется общим решением этой проблемы, но, похоже, у меня это не работает. Я прикрепил /sites-enabled/default конфигурацию ниже. Я делаю что-то не так?! Кажется, что перенаправления php работают нормально, это только в location / том месте, где происходит сбой.

/sites-enabled/default :

 server { 
    listen 8080 defau<
    server_name "" xxx.xxx.xxx.xxx;  #just using IP here (no domain yet)

    port_in_redirect off;
    server_name_in_redirect off;

    access_log  /var/log/nginx/localhost.access.log;


    location / {
            root   /var/www/site/html/;
            index  index index.php;
            try_files $uri/ $uri /index.php?q=$uriamp;$args;
    }

    location ~ .php$ {
            fastcgi_split_path_info ^(. .php)(.*)$;
            fastcgi_pass   backend;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/site/html/$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param  QUERY_STRING     $query_string;
            fastcgi_param  REQUEST_METHOD   $request_method;
            fastcgi_param  CONTENT_TYPE     $content_type;
            fastcgi_param  CONTENT_LENGTH   $content_length;
            fastcgi_intercept_errors        on;
            fastcgi_ignore_client_abort     off;
            fastcgi_connect_timeout 60;
            fastcgi_send_timeout 180;
            fastcgi_read_timeout 180;
            fastcgi_buffer_size 128k;
            fastcgi_buffers 4 256k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;
            fastcgi_param SERVER_PORT 80;
    }

    location ~ /.ht {
        deny  all;
    }
    location ~ /.git {
        deny  all;
    }
    location ~ /.svn {
        deny  all;
    }

}

upstream backend {
    server 127.0.0.1:9000;
}
  

nginx.conf :

 user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log debug;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    multi_accept on; 
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     off;

    keepalive_timeout  30;
    tcp_nodelay        on;

    gzip  on;
    gzip_proxied any;
    gzip_disable "MSIE [1-6].(?!.*SV1)";
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
  

nginx: версия nginx: nginx / 1.0.9

Ответ №1:

На самом деле, только что разобрал это. Простая ошибка — на сайте администратора WordPress wp-admin > Settings > WordPress address (URL) и Site address (URL) у обоих был порт 8080 в URL! Отсюда перенаправление. Вышеупомянутая настройка отлично работает следующим образом.

Если это не решит вашу проблему, один совет, который я узнал, заключался в том, чтобы добавить print_r($_SERVER["SERVER_PORT"]); в ваш index.php чтобы убедиться, что вы получаете правильный порт (80 в моем случае), установленный из fastcgi.

Надеюсь, этот простой шаг может сэкономить кому-то немного времени!

Ответ №2:

Другое решение состоит в том, чтобы ваш серверный блок Nginx прослушивал ваш IP-адрес локального хоста, либо 127.0.0.1, либо [:: 1] (если у вас есть IPv6 — он также поддерживает IPv4) на порту 80 или 8080, затем пусть Varnish прослушивает внешний мир с вашего внешнего IP-адреса xx.xx.xx.xx или [::], на том же порту, который вы использовали для серверного блока Nginx. Тогда вам не нужно перенаправлять, откладывать или что-то еще.