Как обслуживать приложения WordPress (LAMP) и Angular (Node/Express) на одном сервере / домене

В настоящее время я использую веб-сервер с Ubuntu 16.04, обслуживаю сайт Wordpress, использую стек LAMP и SSL LetsEncrypt для шифрования сайта. Я хотел бы иметь возможность запускать приложение Angular со стеком MEAN на одном сервере, используя поддомен.

Вот мои файлы Apache, работающие сейчас в моей папке с включенными сайтами.

000-default.conf

<VirtualHost *:80>
        ServerName www.example.com
        Redirect permanent / https://example.com/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Пример-ле-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName example.com
        ServerAdmin me@gmail.com
        DocumentRoot /var/www/example
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/example>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
         </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias www.example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

Можно ли выполнить то, что я хочу? Если так, то как?

1 ответ

Это может быть сделано. Однако вы не можете привязать двух слушателей к одному и тому же порту и устройству.

Самый простой способ - обслуживать приложение node.js через apache.
Во-первых, обязательно включите mod_proxy в httpd.conf или другом файле conf. Затем создайте новый виртуальный хост для своего субдомена, который указывает порт, который прослушивает приложение node.js.
Например: (при условии, что ваше приложение node.js прослушивает порт 8080):

<VirtualHost *:443>
    ServerName mysub.domain.com
    ProxyPreserveHost On

    # proxy settings to route to node.js
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass "/" "https://localhost:8080/"
    ProxyPassReverse "/" "https://localhost:8080/"

    # ssl settings
    Include /etc/letsencrypt/options-ssl-apache.conf
    ServerAlias www.example.com
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

</VirtualHost>

Это приведет к тому, что весь трафик через Apache попадет в приложение node.js.
Если вы не запускаете ssl в приложении node.js, вы должны использовать порт 80 и http:// для этого виртуального хоста.

<VirtualHost *:80>
    ServerName mysub.domain.com
    ProxyPreserveHost On

    # proxy settings to route to node.js
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass "/" "http://localhost:8080/"
    ProxyPassReverse "/" "http://localhost:8080/"

</VirtualHost>
Другие вопросы по тегам