2013-05-23 5 views
4

У меня возникла проблема, когда некоторые переадресации на веб-сайте имеют включенный прокси-порт, что делает их бесполезными. Моя конфигурация выглядит следующим образом:Удаление порта из nginx redirect

Физический сервер 1:

server { 
    server_name example.com www.example.com; 

    location/{ 
      proxy_pass    http://1.1.1.1:50493; 
      proxy_set_header  X-Real-IP $remote_addr; 
      proxy_set_header  Host "example.com"; 
    } 
} 

Физический сервер 2:

server { 
      listen 50493; 
      server_name example.com www.example.com; 

      set_real_ip_from 1.1.1.1; 

      root /var/www/example.com; 
      index index.php index.htm index.html; 

      location/{ 
        if ($http_host !~ "^example.com"){ 
          set $rule_0 1$rule_0; 
        } 
        if ($rule_0 = "1"){ 
          rewrite ^/(.*) http://example.com/$1 permanent; 
        } 
          rewrite /[^/]+/([0-9]+)-[^/]+.html http://example.com/showthread.php?t=$1 permanent; 
      } 

      location ~ .php$ { 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME /var/www/example.com$fastcgi_script_name; 
       include fastcgi_params; 
       fastcgi_read_timeout 600s; 
       fastcgi_buffer_size 512k; 
       fastcgi_buffers 16 512k; 
      } 
    } 

Вообще, просмотр работает отлично. Сайт доступен для просмотра, как и ожидалось. Однако некоторые ссылки, которые перенаправляются (например, после действия входа), перенаправляются на ссылку с портом 50493. Таким образом, мы получаем, например, http://example.com:50493/index.php. Это не будет работать. Мой вопрос: как мне удалить порт?

Из того, что я могу сказать, программное обеспечение форума берет порт из переменной порта сеанса php. Я пробовал установить port_in_redirect, но безрезультатно. Если это помогает, то проблема здесь выделена: http://kb.parallels.com/en/114425 похож.

спасибо.

ответ

0

Он рассказывает вам, как исправить вашу проблему в указанной вами ссылке. Изменение:

<?php echo $VAR->domain->asciiName ?>:<?php echo $OPT['ssl'] ? $VAR->server->webserver->httpsPort : $VAR->server->webserver->httpPort ?>" 

в

<?php echo $VAR->domain->asciiName ?>" 

Вы должны исправить это в вашем приложении, а не в Nginx.

Ваше приложение генерирует ссылки, которые указывают на порт 50493 like this. Если вы не собираетесь настраивать фильтр содержимого, который проходит через весь HTML, и заменяет example.com:50493/path/of/url на example.com/path/of/url, вы должны исправить его внутри приложения.

+0

привела меня на шаг ближе, и я имею решение сценария в настоящее время. Благодарю. Но так как php-fpm добавляет порт ($ _SERVER ['SERVER_PORT']), я надеюсь на исправление nginx. Я мог бы частично исправить это с помощью значения proxy_redirect, но не с уловкой. – zataived

+0

PHP-FPM ничего не добавляет. Он правильно устанавливает _SERVER ["SERVER_PORT"] равным 50493, который является вашим компьютером, который прослушивает PHP-FPM, но это код параллелей, который добавляет его к URL-адресу. – Danack

+0

Извинения за поздний ответ. Ответ Данака в конце концов помог мне. Я сделал условие if для $ _SERVER ['SERVER_PORT'] в моем программном обеспечении. Если php обнаруживает, что это 50493 (порт прокси), я принудительно переношу его на порт 80. – zataived

0

попробовать замена на лету

HttpSubModule

sub_filter  
    'example.com:50493/' 'example.com/' ; 
sub_filter_once off; 

это следует сделать трюк.

5

в вашем nginx.conf

http { 

port_in_redirect off; 

}