Nginx. При запросе "site.ru:82" отбрасывается порт.

riff

Новичок
С nginx только начинаю разбираться. Для гугла не сумел сформулировать запрос.
При регистрации хостинга (vps) выдаётся технический адрес типа "user.hoster.com". Создавать к нему поддомены не даёт. Вместо этого я разместил тестовые версии двух сайтов на разных портах "user.hoster.com:81" и "user.hoster.com:82".

В случае с отключённым nginx, оба сайта открываются, с подключённым имеется следующая проблема:
сайт на 81-ом порту открывается и порт из адресной строки не пропадает,
на 82-ом - порт пропадет. (Если это важно, то на 82-ом сайт на drupal 6, .htaccess временно убрал из корня сайта).

В /etc/nginx/sites-available добавил конфигурацию от сюда http://wiki.nginx.org/Drupal
Ища проблему, постирал всё лишнее, оставив только:

server {
listen 82;

root /var/www/admin/pma/www;

# Защита от бага http://forum.nginx.org/read.php?2,154025,154036
server_name_in_redirect off;

access_log off; # /var/www/admin/pma/logs/nginx-access.log;
error_log /var/www/admin/pma/logs/nginx-error.log;
#rewrite_log on;

# Enable compression, this will help if you have for instance advagg‎ module
# by serving Gzip versions of the files.
gzip_static on;

set $original_uri $request_uri;

location / {
proxy_pass http://127.0.0.1:8082/; # делаем переадресацию запросов на apache
proxy_redirect off;
proxy_set_header Host $host;
#proxy_set_header REQUEST_URI $original_uri;
# Эти настройки необходимы, что бы из скриптов было видно реальные IP пользователя, а не фронт-части
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# This is cool because no php is touched for static content
try_files $uri @rewrite;
}

location @rewrite {
# You have 2 options here
# For D7 and above:
# Clean URLs are handled in drupal_environment_initialize().
#rewrite ^ /index.php;
# For Drupal 6 and bwlow:
# Some modules enforce no slash (/) at the end of the URL
# Else this rewrite block wouldn't be needed (GlobalRedirect)
rewrite ^/(.*)$ /index.php?q=$1;
}
}
Оказалось проблему вызывает @rewrite, но это странно потому, что почти такой же @rewrite на 81-ом порту, порт не затрагивает. (На 81-ом порту у меня прописана "rewrite ^ /index.php;" в @rewrite. И сайт не на Drupal.)

Вот здесь я и застопорился. Подскажите, пожалуйста, почему теряется порт?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
не сам @rewrite, а строка "try_files $uri @rewrite;", которая отправляет обработку в тот location

ТС, тебе надо или прочесть документацию и разобраться что ты пишешь, или нанять кого-то, кто настроит тебе сервер,
дебажить за тебя бесплатно никто не будет
 

riff

Новичок
То, что надо читать, я понимаю, но что читать в конкретном случае - не знаю.

Вот сейчас, ничего не меняя (вместе с "try_files $uri @rewrite;"), при обращении к "user.hoster.com:82", порт откидывается и в адресной строке остаётся "user.hoster.com"
А если в папке оставить только index.php с содержимым " <?php echo 'test'; ", то порт остаётся на месте и в браузере выводится "test".

И в тоже время, отключив "try_files $uri @rewrite;" порт не отбрасывается, и сайт открывается.

Поэтому нельзя сказать однозначно, что "try_files $uri @rewrite;" теряет порт.

Вот что мне читать в данном случае? Где проблема?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
нет такого понятия как "откидывание порта", я не знаю что ты имеешь ввиду под "порт откидывается"
в роутинге есть "проброс порта", но к Nginx это не имеет отношения
 

riff

Новичок
Хорошо что "нет", а где он ? : ) (своё предыдущее сообщение я отредактировал, добавив новых фактов).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
riff, на твой вопрос нет простого ответа, это надо брать и настраивать, заочно не получится
web developmnent - это профессия, этому учатся по много лет, за это неплохо платят, не хочешь читать документацию - перейди на shared hosting и не морочь себе голову с vps
 

riff

Новичок
Пожалуйста, не надо меня обвинять в том, что я "не хочу". Я сидел и читал, и видимо что-то понял раз получилось запустить сайт на 81-ом порту.
То, что, практически при таком же конфиге, на 82-ом "echo 'test'" работает, а dupal-сайт не открывается (точнее теряет :82), я не могу найти в документации, поэтому и обратился на форум. Если не за ответами, так хотя бы за идеями. Идея "перейди на shared hosting" - не вариант.
 

Вурдалак

Продвинутый новичок
Сам Drupal может редиректить. Посмотри через
Код:
curl -vL http://example.com:82/
 

riff

Новичок
Кажется нашёл. Из-за того, что, при nginx rewrite, в $_SERVER['REQUEST_URI'] передаётся "/index.php?q=..." вместо "нормального".
Если насильно(в начале index.php) привести $_SERVER['REQUEST_URI'] к нормальному виду, то всё работает.

Надо заставить передавать nginx оригинальный REQUEST_URI.

-----------
Не совсем верно выразился. Апачу передаётся новый адрес, как я понял, и соответственно в скрипте получаю не тот request_uri. Ну или что-то типа того.

Что с этим делать?

----------
А, вот ответ: http://syntaxc.blogspot.ru/2013/03/yii-nginx-rewrites-curlmanager.html
(пока не уверен, надо разбираться)
 

riff

Новичок
Страницу не обновил, новый ответ только что заметил. Вурдалак, спасибо, что не прошёл мимо. Сейчас твоим советом воспользоваться не могу (команда curl не найдена), видимо не всё ещё установлено, при случае взгляну. Но похоже я свою проблему решил.
 

hell0w0rd

Продвинутый новичок
Кажется нашёл. Из-за того, что, при nginx rewrite, в $_SERVER['REQUEST_URI'] передаётся "/index.php?q=..." вместо "нормального".
location @rewrite {
# You have 2 options here
# For D7 and above:
# Clean URLs are handled in drupal_environment_initialize().
#rewrite ^ /index.php;
# For Drupal 6 and bwlow:
# Some modules enforce no slash (/) at the end of the URL
# Else this rewrite block wouldn't be needed (GlobalRedirect)
rewrite ^/(.*)$ /index.php?q=$1;
Вы комментарии читали в своем конфиге?
 

riff

Новичок
На сколько я понял происходит это из-за модуля Global Redirect и из-за того что после rewrite в $_SERVER['REQUEST_URI'] передаётся "/index.php?q=...".
Использование чистых ссылок: включение этого параметра включит перенаправление на адреса использующие чистые ссылки. Например, запрос страницы «example.com/?q=node/1» будет перенаправлен на «example.com/node/1»
Отключать я его сейчас не хочу, потому что на форумах пишут, что он полезен.
Справиться с получением оригинального $_SERVER['REQUEST_URI'] у меня не получилось.
http://sysoev.ru/nginx/docs/faq.html есть ответ, но у меня не на fastcgi.
Поэтому убрал rewrite, вернул .htaccess, сайт открывается, а дальше будем продолжать читать.
 

hell0w0rd

Продвинутый новичок
Справиться с получением оригинального $_SERVER['REQUEST_URI'] у меня не получилось..
Ниасилил...
location @rewrite {
# You have 2 options here
# For D7 and above:
# Clean URLs are handled in drupal_environment_initialize().
#rewrite ^ /index.php;
# For Drupal 6 and bwlow:
# Some modules enforce no slash (/) at the end of the URL
# Else this rewrite block wouldn't be needed (GlobalRedirect)
rewrite ^/(.*)$ /index.php?q=$1;
А вот яндекс-перевод:
location @переписать {
# У вас есть 2 варианта здесь
# D7 и выше:
# Очистить Url-адреса обрабатываются в drupal_environment_initialize().
#переписать ^ /index.php;
# Для Drupal 6 и bwlow:
# Некоторые модули применять без слэша (/) в конце URL-адреса
# Else переписать этот блок не будет необходимости (GlobalRedirect)
переписать ^/(.*)$ /index.php?q=$1;
у вас раскомментирован участок для друпала какого-то, который не желал смотреть в поле request_uri, а искал q в реквесте
 

fixxxer

К.О.
Партнер клуба
Это какой-то запредельно дурной конфиг. Если всё - даже статика - проксируется на апач, почему тогда реврайт делается не в апаче?
 

riff

Новичок
Это какой-то запредельно дурной конфиг
В первом сообщении или в ссылке чуть выше? Если в сообщении, то я сказал, что стирал всё, в поисках ошибки.
почему тогда реврайт делается не в апаче
В последнем сообщении сказал, что так и сделал (имею ввиду rewriterule'сы оставил на обработку апачу).

у вас раскомментирован участок для друпала какого-то, который не желал смотреть в поле request_uri, а искал q в реквесте
Ну собственно потому, что дали посмотреть на Drupal6, а раз так сказано в комментарии, что эта строка для D6, то у меня не было основания не доверять.
Комментария ниже я сразу не смог понять, потому что не знал о чём идёт речь, и сейчас не очень понимаю как подружить rewrite_uri обработанный nginx, "красивые адреса" и модуль globalredirect. Поэтому, сейчас я просто отключил rewrite в nginx, оставив это дело апачу. А пока читаю и разбираюсь с остальным.
 
Сверху