Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6475
Последний выпуск: 19.06.2015

Nginx rewrite, перенос настроек из Apache htaccess

264
27 октября 2011 года
foxweb
995 / / 27.07.2005
Всем привет.

Затеял тотальное избавление от Apache на всех своих серверах в пользу nginx.
С настройками Ruby on Rails PHP-FPM, статики, акселератора APC и кэшированием я разобрался. Удалось даже запустить Битрикс под nginx.

Теперь возник резонный вопрос: как перевести классические .htaccess в nginx?
В частности меня интересует rewrite. Рассмотрим пример с реврайтингом URL http://site.com/texts/...

apache:
 
Код:
RewriteRule ^texts\/([0-9]+)\.htm$ index.php?mod=viewtext&id=$1

RewriteRule ^(files|foxgb|links|texts|other|blog|lastcomments|mail|upload|photo|myprojects|other|links|limits|banner|about|rating|friends)/?$ index.php?mod=$1&%{QUERY_STRING}


Правильно отрабатывают:
[COLOR="#006400"]/texts/
/texts/68.htm
/texts/?var1=aaa&var2=bbb[/COLOR]


nginx:
 
Код:
if (!-e $request_filename) {
                rewrite ^/(files|foxgb|links|texts|other|blog|lastcomments|mail|upload|photo|myprojects|other|links|limits|banner|about|rating|friends)/?$  /index.php?mod=$1?;
                rewrite ^/texts/([0-9]+)\.htm$ /index.php?mod=viewtext&id=$1 last;
                rewrite ^/preview/?(.*)$ index.php?mod=preview? last;
                break;
        }


Правильно отрабатывают:
[COLOR="#006400"]/texts/
/texts/68.htm[/COLOR]

Не работает:
[COLOR="red"]/texts/?var1=aaa&var2=bbb[/COLOR] (выдаёт тоже, что и просто /texts/)

Вопрос к знатокам: как правильно передавать GET -параметры при rewrite?
В гугле не забанили, читаю сухие мануалы и там на эту тему как-то не особо. Все делают по-разному, нет единого рецепта.

Покажите ваши конфиги? Как вы делаете rewrite?

P.S. — Крайне рекомендую всем переходить с Apache на nginx. Небо и земля.
P.P.S. — Собсно, ссылка на обсуждаемый сайт — в подписи к посту :)
264
27 октября 2011 года
foxweb
995 / / 27.07.2005
Нашёл решение. Нужно добавлять $args для добавления всех GET-параметров или $arg_id — для конкретного параметра «id».

Рабочий вариант:
 
Код:
rewrite ^/(files|foxgb|links|texts|other|blog|lastcomments|mail|upload|photo|myprojects|other|links|limits|banner|about|rating|friends)/?$  /index.php?mod=$1&$args;


За помощь спасибо Тень Пса!
4
27 октября 2011 года
mike
3.7K / / 01.10.2002
nginx не панацея, переходить на nginx имеет смысл только в определенных специфичных случаях.
264
27 октября 2011 года
foxweb
995 / / 27.07.2005
Цитата: mike
nginx не панацея, переходить на nginx имеет смысл только в определенных специфичных случаях.



В моём случае PHP-FPM и Ruby on Rails очень хорошо уживаются вместе на сильно ограниченных ресурсах виртуальной машины (Ubuntu x86_64, 10 LTS, памяти 614 Мб на всё + MySQL). Грузить Апач с зоопарком громоздких модулей не вижу смысла — не те приложения, а на рельсах он вообще крайне нестабилен и тормозит. Так что моё решение не в стиле «а давайте сделаем круто и модно» :)

Кроме того, сайты работают реально быстрее, а для заказчиков это критичный момент.

13
27 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Давненько тебя тут не было, фокс.
У Апача зоопарк модулей можно разогнать. И что это за сервак у тебя такой? Антиквариат конца 90х?
264
27 октября 2011 года
foxweb
995 / / 27.07.2005
Цитата: RussianSpy
Давненько тебя тут не было, фокс.
У Апача зоопарк модулей можно разогнать. И что это за сервак у тебя такой? Антиквартиат конца 90х?



Облако Amazon EC2. Условно-бесплатный тариф. Следующая ступень тарифа очень дорогая для моих задач. Пока не окупается. Апач реально не нужен и даже вреден для Рельсов, хочется маленького, простого и шустрого.

261
27 октября 2011 года
MrXaK
721 / / 31.12.2002
Цитата: foxweb
Облако Amazon EC2. Условно-бесплатный тариф. Следующая ступень тарифа очень дорогая для моих задач. Пока не окупается. Апач реально не нужен и даже вреден для Рельсов, хочется маленького, простого и шустрого.



а что у них за условно-бесплатный тариф? )) сколько обходится, как зарегаться, как платить? ))

264
28 октября 2011 года
foxweb
995 / / 27.07.2005
Условно-бесплатный тариф называется Free Tier, обходится бесплатно в течение года (если укладываться в оговоренный ресурс), платить как и везде в американских интернет-магазинах — квитанцией в сбербанке :))))
13
28 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Это виртуальный сервер или кака вроде гуглового облака где даже sql нет?
264
28 октября 2011 года
foxweb
995 / / 27.07.2005
Цитата: RussianSpy
Это виртуальный сервер или кака вроде гуглового облака где даже sql нет?



Google App Engine — узкоспециализованная Python-платформа для сайтов/сервисов, а не облачный хостинг. Платформа как услуга.

Amazon — инфраструктура как услуга. Виртуальный дата-центр без реального железа со своими сетями, стойками и кластеризацией. Веб-хостинг — всего лишь капля в море того, что можно развернуть на нём.

13
28 октября 2011 года
RussianSpy
3.0K / / 04.07.2006
Там не только Python - мы там держали проект на Java, но потом ушли оттуда поскольку без СУБД просто невозможно.

Я знаю что такое облако - просто облака бывают разные. Но в любом случае судя по всему мне это не подходит
264
28 октября 2011 года
foxweb
995 / / 27.07.2005
Цитата: RussianSpy
Там не только Python - мы там держали проект на Java, но потом ушли оттуда поскольку без СУБД просто невозможно.

Я знаю что такое облако - просто облака бывают разные. Но в любом случае судя по всему мне это не подходит



Вот и я о том, что облака разные. Просто такие сервисы как Amazon, Rackspace, Оверсан именно ресурс. А уж что на нём разворачивать — Виндовс, Линукс — это заказчик решает. AppEngine изначально для этого никак не подходил, так странно было выбирать кастрированное решение, а потом «уходить» с него.

Но наш разговор — это оффтопик.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог