Без проблем. Nginx умеет проворачивать такие вещи, проксируя с разных DNS на целевой IP-адрес с разными сервисами. Есть как минимум 2 варианта использования Nginx в этих целях:
1. Reverse proxy на локальные IP-адреса;
2. Reverse proxy на UNIX-сокет.
При помощи Nginx можно разнести Ваши форумы, к примеру, по разным поддоменам.
Допустим, Вы арендуете домен
mydisc.com и Вы хотите, чтобы один форум (сервис) был на
foo.mydisc.com, а второй, собственно, на
bar.mydisc.com. Также допустим, что Вы уже арендуете VPS с выделенным IP (пусть будет 11.22.33.44).
Также допустим, что Вы уже создали свои домены и привязали их к своему VPS.
Тогда в Nginx создаётся файл конфигурации (упрощено):
/etc/nginx/nginx.confuser sample;
worker_processes 4;
http {
include mime.types;
...
# если используете HTTPS - подключаете строки ниже:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 20m;
ssl_buffer_size 6k;
# здесь рекурсивно подключаете все свои сервисы
include /etc/nginx/servers-enabled/*;
}
Создаёте папку
/etc/nginx/servers-available/ и создаёте в ней, к примеру, два файла: foo и bar. Каждый из них будет содержать что-то вроде:
fooupstream foo {
# здесь есть 2 способа проксировать своё приложение: UNIX-сокет (puma умеет такое делать)...
server unix:/srv/http/foo/shared/sockets/puma.sock fail_timeout=0;
# ... или адрес:
server 127.0.0.1:9292 fail_timeout=0;
}
server {
listen 80;
server_name foo.mydisc.com;
# если используете HTTPS - редирект
return https://foo.mydisc.com$request_uri;
}
server {
listen 443 ssl http2;
server_name foo.mydisc.com;
root /srv/http/foo/public;
ssl_certificate /etc/certs/mycert/fullchain.pem;
ssl_certificate /etc/certs/mycert/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security 'max-age=1209600'; # HSTS на 1 год
location {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass http://foo;
}
location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt { # папка с ассетами
gzip_static on;
expires max;
add_header Cache-Control public;
}
# можете настроить под себя
# error_page 500 502 503 504 /500.html;
# client_max_body_size 4G;
# keepalive_timeout 70;
}
barupstream bar {
# здесь есть 2 способа проксировать своё приложение: UNIX-сокет (puma умеет такое делать)...
server unix:/srv/http/bar/shared/sockets/puma.sock fail_timeout=0;
# ... или адрес:
server 127.0.0.1:<b>9393</b> fail_timeout=0;
}
server {
listen 80;
server_name bar.mydisc.com;
# если используете HTTPS - редиректите
return https://bar.mydisc.com$request_uri;
}
server {
listen 443 ssl http2;
server_name bar.mydisc.com;
root /srv/http/bar/public;
ssl_certificate /etc/certs/mycert/fullchain.pem;
ssl_certificate /etc/certs/mycert/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security 'max-age=1209600'; # HSTS на 1 год
location {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass http://bar;
}
location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt { # папка с ассетами
gzip_static on;
expires max;
add_header Cache-Control public;
}
# можете настроить под себя
# error_page 500 502 503 504 /500.html;
# client_max_body_size 4G;
# keepalive_timeout 70;
}
Идёте в /etc/nginx/servers-enabled и линкуете по желанию:
ln -s ../servers-available/foo .
ln -s ../servers-available/bar .
Проверяете синтаксис...
# nginx -t
И перезапускаете Nginx.
Собственно и всё. Можете хоть 10 сервисов держать на VPS и разнести их на разные поддомены - все будут висеть на одном IP и не будут друг с другом драться.