We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7668
    • 8 Posts
    Хеллоу все.

    Требуется ваша помощь. Ситуация такая.
    Есть сервер А (фронтенд), на нем стоит nginx (отдает статику). Есть сервер Б (backend), на нем стоит апач + пхп + мускул. Также, на бэкенде стоит MODx Revo 2.0.3. Внимание вопрос: как донести до nginx`а, что движку позарез нужны ЧПУ? Везде есть правила только для mod_rewrite. Понять, как настроить в данном случае nginx я увы не могу. Проблема обостряется еще и тем, что серверов два.

    Спасибо заранее. Если надо, конфиги нгинха могу предоставить.
      • 9085
      • 630 Posts
      Эм.. А зачем nginx-у знать про ЧПУ? Пускай отдаёт только "настоящую" статику.. (картинки, css-ки, js). Остальное будет перекидывать на Апач + mod_php, а он обработает .htaccess (как вариант - можно обходиться без апача - php_fcgi, а все запросы направлять на index.php)

      В конфиг nginx-а для статики добавить что-то вроде:

          location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
          root /var/www/example.com/;
          access_log off;
          expires 30d;
          }
      

      Для всего остального - перенаправление на Apache-backend (судя по всему, он уже работает?).

      http://wiki.nginx.org/VirtualHostExample

      http://server-tuning.info/nginx/apache-frontend.html
      http://adw0rd.ru/2009/nginx-and-apache-install/
        Правильно заданный вопрос повышает вероятность получения нужного ответа.
        Что-то не работает? Загляните в лог ошибок!
        Есть проблема? "Локализуйте" её!
        Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
        • 7668
        • 8 Posts
        Привет! Сейчас конфиг для домена в нгинхе выглядит так:

        nserver {
            server_name mydomain.ru;
            server_name www.mydomain.ru;
            access_log /opt/nginx/log/mydomain.ru.access.log main;
            
            gzip_vary on;
            gzip_static on;
        	
        	if ($host = 'mydomain.ru' ) {
        	rewrite ^(.*)$ http://www.mydomain.ru$1 permanent;
        	}
        
        	location = /error_50x.html {
        	    root /opt/nginx/etc/html;
        	}
        
        	location / {
                error_page 404 500 502 503 504  /index.php?id=104 ;
        	
        	index index.php;
         	proxy_redirect off;
        	proxy_set_header Host $host;
        	proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        	proxy_cache_key "$scheme://$host$request_uri";
        	proxy_cache STATIC;
        	proxy_cache_valid 200 302 60m;
        	proxy_cache_valid 404 1m;
        	proxy_pass http://backend;
        
        
        	fastcgi_pass x.x.x.x:port;
        	fastcgi_index index.php;
        	fastcgi_param SCRIPT_FILENAME /home/vhosts/mydomain.ru/html$fastcgi_script_name;
                fastcgi_intercept_errors on;
        	include fastcgi_params;
        
            }
            location ~* \.(xml)$ {
                proxy_pass http://backend;
                proxy_set_header Host $host;
            }
        
            location ~* \.(jpg|png|gif|jpeg|css|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx|js|rar|zip|gz|exe|dll)$ {
        	error_page 404 500 502 503 504  /error.php ;
        #	proxy_cache_key "$scheme://$host$request_uri";
        #	proxy_cache_valid 200 1d;
        #	expires 604800;
        #	proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
        #	proxy_pass http://backend;
        #	proxy_cache STATIC;
        
         	proxy_redirect off;
        	proxy_set_header Host $host;
        	proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        	proxy_cache_key "$scheme://$host$request_uri";
        	proxy_cache STATIC;
        	proxy_cache_valid 200 302 60m;
        	proxy_cache_valid 404 1m;
        	proxy_pass http://backend;
        	proxy_intercept_errors on;	
            }
        
                                                
        
            
            location @storage {
        	proxy_pass http://backend;
        	proxy_set_header Host $host;
            }
            
            location ~ \.php$ {
        	error_page 404 500 502 503 504  /index.php?id=104 ;	
                fastcgi_intercept_errors on;	
        	fastcgi_pass x.x.x.x:port;
        	fastcgi_index index.php;
        	fastcgi_param SCRIPT_FILENAME /home/vhosts/mydomain.ru/html$fastcgi_script_name;
        	include fastcgi_params;
            }
        }


        Если подскажете, как его оптимизировать, ну и настроить, чтобы ЧПУ пахали, я буду дико признателен. Дело в том, что я сам в нгинхе не особо шарю, но с вашей помощью надеюсь разобраться.
          • 9085
          • 630 Posts
          http://adw0rd.ru/2009/nginx-and-apache-install/#more-843 - тут статья.. практически всё расписано. Ссылка прямо на блок конфига nginx.

          1. nginx должен висеть на 80 порту и принимать все запросы; apache - на другом (например, 83 или 87), и слушать только запросы с локального адреса (127.0.0.1.. на время теста - не обязательно... проверять удобнее.. набрать http://site.com:83/about/)
          2. nginx все запросы к статике (см. блок с расширениями) обрабатывает сам, остальное проксирует на apache... А ЧПУ как работали на APACHE, так и будут продолжать работать - для него в этом плане ничего не изменилось. Если требуется расширения .html перенаправлять на Apache - нужно просто убрать html из блока в скобках.

          За основу конфига можно взять стандартный.. или из статьи... и пройтись по каждой строчке.
          Естественно все домены и пути нужно "подправитЬ" под свои нужды.. Ничего сложного.

          ps. В любом случае, для оптимальной настройки без чтения мануалов не обойтись..

            Правильно заданный вопрос повышает вероятность получения нужного ответа.
            Что-то не работает? Загляните в лог ошибок!
            Есть проблема? "Локализуйте" её!
            Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
            • 7668
            • 8 Posts
            Так машины то разные! Nginx на одной, а Apache — на другой.
            Конфиги совпадают в целом. Я в личку отписал, напиши асю свою, а то здесь долго получается.
            Решение выложим, как победим smiley
              • 9085
              • 630 Posts
              Кто подсказал архитектуру такую? Или вычитано где? Сдается мне, что сделано без понимания и "немного не так".

              Попробую совсем коротко пояснить смысл установки NGINX-а "фронтендом" к Apache (и всё это вертится на одной машине).
              (подробнее можно прочитать, например, тут - битрикса не пугаться.. курс "общий" теоретический.. расписано всё вполне доступно)

              1. Каждый запущенный процесс Apache с кучей модулей (например, mod_php, для обработки php-файлов) занимает ~10-20Мб оперативки
              2. Для отдачи статической картинки и отдачи php-скрипта загружается одинаковый apache со всем "Добром"
              3. nginx (сам по себе занимает меньше памяти и "быстрее") "фронтендом" к Apache позволяет уменьшить число обращений к Apache тем, что часть запросов (по отдаче статики) выполняет сам, и "тяжелый апач" запускается только "по назначению" - для обработки PHP-файлов.

              Если nginx физически не имеет доступа к файлам (т.е. файлы лежат на другом сервере) в любом случае какой-то процесс на удаленном сервере должен их отдавать... И если это будет тот же самый "большегрузный Апач", то...

              "Внимание вопрос"(с): нафига фронтенд???

              Удачи!
              ps. В аське буду завтра-послезавтра.. Но, надеюсь, направил в нужную сторону... Информации в инете МНОГО. прочитать внимательно первоисточник (nginx.org, sysoev.ru)

              pps. На загруженных проектах (практически для всех LAMP.. хотя, исключения могут быть) на отдельный сервер имеет смысл выносить базу, а уж потом серверные "прослойки" ставить... к нескольким бэкендам. Что-то мне подсказывает, что это "не тот" случай. smiley

              ppps. Если архитектура все же правильная, и NGINX на отдельной машине должен всего лишь кэшировать (хотя, думаю, ему столько не нужно.. он не такой жадный), то все запросы следует перенаправлять к серверу с Apache.. Что делать с ЧПУ - он разберется.
                Правильно заданный вопрос повышает вероятность получения нужного ответа.
                Что-то не работает? Загляните в лог ошибок!
                Есть проблема? "Локализуйте" её!
                Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx