В настоящее время я использую веб-сервер с Ubuntu 16.04, обслуживаю сайт Wordpress, используя стек LAMP и LetsEncrypt SSL для шифрования веб-сайта. Я хотел бы иметь возможность запускать приложение 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>
example-le-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>
Можно ли сделать то, что я хочу? Если да, то как?
Это можно сделать. Однако вы не можете привязать два слушателя к одному и тому же порту и устройству.
Самый простой способ - обслуживать приложение 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>