Как лучше всего запустить Wordpress в том же домене, что и приложение Rails?

У меня есть стандартное приложение Rails с Nginx и Mongrel, работающим на http: // мойдомен. Мне нужно вести блог Wordpress по адресу http://mydomain.com/blog. Я бы предпочел разместить блог в Apache, работающем либо на том же сервере, либо в отдельном окне, но я не хочу, чтобы пользователь видел другой сервер в URL-адресе. Возможно ли это, и если нет, что бы вы порекомендовали для достижения цели?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
12
0
3 411
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Мне кажется, что что-то вроде манипулятора перезаписи будет делать то, что вы хотите. Извините, у меня больше нет подробностей - просто думаю вслух :)

На самом деле, поскольку вы используете Nginx, вы уже в отличной форме и вам не нужен Apache.

Вы можете запускать PHP через fastcgi (есть примеры того, как это сделать в вики Nginx) и использовать шаблон сопоставления URL-адресов в вашей конфигурации Nginx, чтобы направлять одни URL-адреса на Rails, а другие - на PHP.

Вот пример конфигурации Nginx для ведения блога WordPress через PHP fastcgi (обратите внимание, что я также добавил Nginx-эквивалент WordPress .htaccess, поэтому у вас также будут причудливые URL-адреса, уже работающие с этой конфигурацией):

server {
    listen       example.com:80;
    server_name  example.com;
    charset      utf-8;
    error_log    /www/example.com/log/error.log;
    access_log   /www/example.com/log/access.log  main;
    root         /www/example.com/htdocs;

    include /www/etc/nginx/fastcgi.conf;
    fastcgi_index index.php;

    # Send *.php to PHP FastCGI on :9001
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9001;
    }

    # You could put another "location" section here to match some URLs and send
    # them to Rails. Or do it the opposite way and have "/blog/*" go to PHP
    # first and then everything else go to Rails. Whatever regexes you feel like
    # putting into "location" sections!

    location / {
        index index.html index.php;
        # URLs that don't exist go to WordPress /index.php PHP FastCGI
        if (!-e $request_filename) {
            rewrite ^.* /index.php break;
            fastcgi_pass 127.0.0.1:9001;
        }

    }
}

Вот файл fastcgi.conf, который я включаю в приведенную выше конфигурацию (я помещаю его в отдельный файл, чтобы все файлы конфигурации моего виртуального хоста могли включать его в нужное место, но вам не нужно этого делать):

# joelhardi fastcgi.conf, see http://wiki.codemongers.com/NginxFcgiExample for source
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

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_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param  REDIRECT_STATUS    200;

Я также делаю то, что предлагает вики Nginx, и использую spawn-fcgi из Lighttpd в качестве моего CGI-spawner (Lighttpd - это довольно быстрая компиляция без странных зависимостей, поэтому ее легко и быстро установить), но вы также можете используйте для этого короткий сценарий оболочки / Perl.

Ответ принят как подходящий

Я думаю, что решение Джоэлхарди превосходит следующее. Однако в моем собственном приложении я предпочитаю вести блог на отдельном VPS, а не на сайте Rails (разделение проблем с памятью). Чтобы пользователь видел один и тот же URL-адрес, вы используете тот же трюк с прокси-сервером, который вы обычно используете для проксирования в кластер mongrel, за исключением того, что вы проксируете порт 80 (или что-то еще) на другом поле. Очень просто. Для пользователя это так же прозрачно, как проксирование на mongrel - они «видят» только NGINX, отвечающий на порт 80 в вашем домене.

upstream myBlogVPS {
        server 127.0.0.2:80;  #fix me to point to your blog VPS
}

 server {
    listen       80;


    #You'll have plenty of things for Rails compatibility here

    #Make sure you don't accidentally step on this with the Rails config!

    location /blog {
        proxy_pass         http://myBlogVPS;
        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;
    }

Кстати, вы можете использовать этот трюк, чтобы заставить Rails подыгрывать ЛЮБОЙ серверной технологии, которую вы хотите. Прокси-сервер напрямую к соответствующему серверу / порту, и NGINX скроет его от внешнего мира. Кроме того, поскольку все URL-адреса будут относиться к одному и тому же домену, вы можете без особого труда интегрировать блог на основе PHP, систему отслеживания на основе Python и приложение Rails - при условии, что вы правильно напишете URL-адреса.

Согласитесь, решение fastcgi работало нормально, когда оно находилось на одном сервере, хотя мне пришлось переустановить / обновить NGINX и php, потому что fastcgi изначально не был включен. Для отдельного сервера это решение, похоже, работает хорошо - если кто-нибудь знает о каких-либо проблемах, добавьте их.

Brian Deterling 18.09.2008 22:56

Проксирование подойдет вам, но влечет за собой ряд проблем. Одно из них - производительность немного хуже. Во-вторых, вам придется изменить код на своем внутреннем сервере, чтобы он знал, что он работает за прокси-сервером, и должен смотреть на такие вещи, как X-Forwarded-For (который на самом деле является ...

joelhardi 19.09.2008 02:44

... массив IP-адресов, не обязательно один адрес, b / c множество пользователей работают за корпоративными прокси-серверами или прокси-серверами ISP, и вы хотите извлечь фактический IP-адрес пользователя, если ваше приложение что-то с ним делает. Также X-Forwarded-For - это значение, установленное пользователем, поэтому оно не является "доверенным" - см. Apache mod_extract_forwarded для получения дополнительной информации ...

joelhardi 19.09.2008 02:49

... инфа есть. (Проксирование полезно для изучения, вы можете однажды использовать Varnish или Squid!) Другой вариант, помимо HTTP-прокси, - это настроить FCGI для прослушивания порта в окне приложения (таким образом я настроил кластер приложений для PHP FCGI) - Nginx просто обращается к 192.168.0.8:9001 вместо 127.0.0.1:9001. Ваше здоровье!

joelhardi 19.09.2008 02:56

Не могли бы вы помочь в чем проблема с этим serverfault.com/questions/116589/…

Samnang 25.02.2010 10:25

Приведенные выше ответы вполне подходят для вашего вопроса.

Альтернативой FCGI было бы использование php-fpm. Документов немного, но все работает хорошо.

Nginx теперь предоставляет сценарий для этого, если вы находитесь в среде EC2 / AWS.

Его можно легко адаптировать к вашей ситуации. Это очень удобно.

Другие вопросы по теме