@ ОБНОВЛЕНИЕ Проблема была связана с моим метеорным приложением, которое неправильно обрабатывало запросы на https
. Я использовал пакет force-ssl , но, как сказано в README:
Комплекты Meteor (т.е. сборка Meteor) не включают в себя сервер HTTPS или сертификат. Прокси-сервер, который завершает SSL перед пакетом Meteor, должен установить заголовок x-forwarded-proto или forwarded (RFC 7239) для работы этого пакета.
Поэтому я использую приложение staticfile с пользовательским nginx.conf
.
Я создал приложение staticfile с помощью staticfile-buildpack , добавил свои частные домены в routes
в manifest.yml
и установил для переменной env FORCE_HTTPS
значение true
:
applications:
- name: my-nginx
memory: 128M
instances: 1
buildpack: https://github.com/cloudfoundry/staticfile-buildpack.git
routes:
- route: 'app1.mydomain.com'
- route: 'app2.mydomain.com'
- route: 'app1.subdomain.mydomain.com'
- route: 'app2.subdomain.mydomain.com'
- route: 'app3.mydomain.com'
env:
FORCE_HTTPS: true
Следующим шагом было создание пользовательского nginx.conf
с блоком server{...}
для каждого из моих частных доменов с proxy_pass
на соответствующем scapp.io
домене (здесь с двумя частными доменами):
worker_processes 1;
daemon off;
error_log <%= ENV["APP_ROOT"] %>/nginx/logs/error.log;
events { worker_connections 1024; }
http {
charset utf-8;
log_format cloudfoundry '$http_x_forwarded_for - $http_referer - [$time_local] "$request" $status $body_bytes_sent';
access_log <%= ENV["APP_ROOT"] %>/nginx/logs/access.log cloudfoundry;
default_type application/octet-stream;
include mime.types;
sendfile on;
gzip on;
gzip_disable "msie6";
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gunzip on;
gzip_static always;
gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/xml+rss;
gzip_vary on;
tcp_nopush on;
keepalive_timeout 30;
port_in_redirect off; # Ensure that redirects don't include the internal container PORT - <%= ENV["PORT"] %>
server_tokens off;
server {
listen <%= ENV["PORT"] %>;
server_name app1.mydomain.com;
# Redirects to https if the environment variable "FORCE_HTTPS" is set to true
<% if ENV["FORCE_HTTPS"] %>
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
<% end %>
location / {
proxy_pass https://app1.scapp.io/;
}
}
server {
listen <%= ENV["PORT"] %>;
server_name app2.mydomain.com;
<% if ENV["FORCE_HTTPS"] %>
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
<% end %>
location / {
proxy_pass http://app2.scapp.io/;
}
}
}
Следующие шаги являются обычными:
- Создайте домен
mydomain.com
в нужном ORG и каждый из моих частных маршрутов в правильном ПРОСТРАНСТВЕ.
- Создание SSL-сертификатов для каждого из моих частных доменов в консоли swisscomdev.
- Создайте записи CNAME DNS для
mydomain.com
с именем *
и целью my-nginx.scapp.io
(маршрут scapp.io
, автоматически назначаемый swisscom для моего приложения staticfile).
Наконец, я нажал на приложение с cf push
, и оно работает как шарм!