Apps: "Bash", "Docker" & etc.
В этой заметке описан один из этапов реализации поставленной в вышестоящей публикации задачи автоматизации процедур развёртывания тестовых стендов из docker-контейнеров.
После запуска каждого контейнера "Nginx" каждого тестового стенда необходимо будет добавить к конфигурации фронтального web-прокси набор правил проксирования адресованного этому тестовому стенду трафика - автоматизируем это скриптом-шаблоном:
# vi /usr/local/etc/devops/lib/bunch-nginx-proxying.sh.snippet
#!/bin/bash
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell).
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell).
cat << EOF > "/var/opt/devops/front/etc/nginx/bunch.d/${FQDN[$I]}.conf"
# Приём и передача HTTP-трафика
server {
server_name ${FQDN[$I]};
listen 80;
# Проксирование Nginx-контейнеру тестового стенда
location / {
$(echo && echo "${FQDN_ACL_CONFIGURATION[$I]}" && echo)
proxy_pass http://${VIAIPWOM}:80;
proxy_set_header X-Scheme http;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header X-Forwarded-Server \$host;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-NginX-Proxy true;
# (включение поддержки HTTPv1.1 и WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
# Проксирование обработчику LetsEncrypt-запросов
location ~ ^/.well-known/acme-challenge/ {
proxy_pass http://letsencrypt.example.net:880;
proxy_set_header Host \$host;
}
}
# Приём и передача HTTPS-трафика
server {
server_name ${FQDN[$I]};
listen 443 ssl http2;
$(echo && echo "${FQDN_SSL_CONFIGURATION[$I]}" && echo)
# Проксирование Nginx-контейнеру тестового стенда
location / {
$(echo && echo "${FQDN_ACL_CONFIGURATION[$I]}" && echo)
proxy_pass https://${VIAIPWOM}:443;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_ssl_session_reuse on;
proxy_set_header X-Scheme https;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header X-Forwarded-Server \$host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-NginX-Proxy true;
# (включение поддержки HTTPv1.1 и WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell).
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell).
cat << EOF > "/var/opt/devops/front/etc/nginx/bunch.d/${FQDN[$I]}.conf"
# Приём и передача HTTP-трафика
server {
server_name ${FQDN[$I]};
listen 80;
# Проксирование Nginx-контейнеру тестового стенда
location / {
$(echo && echo "${FQDN_ACL_CONFIGURATION[$I]}" && echo)
proxy_pass http://${VIAIPWOM}:80;
proxy_set_header X-Scheme http;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header X-Forwarded-Server \$host;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-NginX-Proxy true;
# (включение поддержки HTTPv1.1 и WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
# Проксирование обработчику LetsEncrypt-запросов
location ~ ^/.well-known/acme-challenge/ {
proxy_pass http://letsencrypt.example.net:880;
proxy_set_header Host \$host;
}
}
# Приём и передача HTTPS-трафика
server {
server_name ${FQDN[$I]};
listen 443 ssl http2;
$(echo && echo "${FQDN_SSL_CONFIGURATION[$I]}" && echo)
# Проксирование Nginx-контейнеру тестового стенда
location / {
$(echo && echo "${FQDN_ACL_CONFIGURATION[$I]}" && echo)
proxy_pass https://${VIAIPWOM}:443;
proxy_ssl_verify off;
proxy_ssl_server_name on;
proxy_ssl_session_reuse on;
proxy_set_header X-Scheme https;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host \$host;
proxy_set_header X-Forwarded-Server \$host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-NginX-Proxy true;
# (включение поддержки HTTPv1.1 и WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF