#amazon-web-services #spring-boot #ssl #nginx #amazon-elastic-beanstalk
#amazon-веб-сервисы #весенняя загрузка #ssl #nginx #amazon-elastic-beanstalk
Вопрос:
Я пытаюсь включить https для моего серверного сервера springboot, развернутого на AWS elastic beanstalk, с помощью самоподписанного SSL. Я следовал онлайн-руководствам, чтобы изменить конфигурацию nginx с помощью нового https-instance.config.
files:
/etc/nginx/conf.d/myconf.conf:
mode: "conf"
owner: root
group: root
content: |
# HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN CERTIFICATE-----
mycert
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN RSA PRIVATE KEY-----
mykey
-----END RSA PRIVATE KEY-----
/opt/elasticbeanstalk/hooks/appdeploy/post/03_restart_nginx.sh:
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
sudo service nginx restart
Когда я подключаюсь по ssh к своему экземпляру, я не могу найти свои файлы myconf.conf в разделе conf.d. Запуск service nginx status
выдает мне
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/nginx.service.d
└─nginx.conf
Active: active (running) since Wed 2020-08-26 03:06:34 UTC; 15min ago
Process: 28894 ExecStartPost=/bin/sh -c systemctl show -p MainPID nginx.service | cut -d= -f2 > /var/pids/nginx.pid (code=exited, status=0/SUCCESS)
Process: 28890 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 28887 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 28886 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 28893 (nginx)
CGroup: /system.slice/nginx.service
├─28893 nginx: master process /usr/sbin/nginx
└─28897 nginx: worker process
Aug 26 03:06:34 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Aug 26 03:06:34 nginx[28887]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Aug 26 03:06:34 nginx[28887]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Aug 26 03:06:34 systemd[1]: Started The nginx HTTP and reverse proxy server.
Что я упускаю. Это мой первый проект на AWS EBS.
Примечание: я запускаю единый экземпляр бесплатного уровня для EBS
Ответ №1:
nginx
Настройка, которую вы пытаетесь использовать ( /etc/nginx/conf.d/myconf.conf
), предназначена для Amazon Linux 1.
Но, похоже, вы используете Amazon Linux 2 (AL2). Таким образом, вы должны использовать разные файлы для настройки nginx. Для AL2 настройки nginx должны быть в .platform/nginx/conf.d/
, а не в .ebextentions
, как показано в документах.
Следовательно, у вас может быть следующее .platform/nginx/conf.d/myconfig.conf
с содержимым:
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Выше приведен пример только файла конфигурации. Я не могу проверить, действительно ли настройка будет работать, но вы определенно используете неправильные папки для настройки параметров nginx в AL2.
Моя рекомендация состояла бы в том, чтобы сначала попытаться заставить его работать вручную через ssh. Возможно, вам потребуется перезаписать все настройки nginx, если ничего не работает, предоставив свой собственный .platform/nginx/nginx.conf
файл.
Комментарии:
1. Спасибо, Марчин, мне не приходило в голову, что это может быть неправильная версия Linux!
2. Большое вам спасибо! Я потратил много времени на просмотр документов / руководств AWS (но я предполагаю, что это было для неправильной версии). Я не мог понять, почему мои конфигурации не отображались при входе по ssh.
3.
.platform/nginx/nginx.conf
выполняется ли это раньше.platform/hooks
? У меня есть такая настройка, но всегда выдает ошибку, что файл.crt
не существует. Файл, созданный с помощьюcertbot
, который выполняется на.platform/hooks/prebuild
Ответ №2:
Amazon Linux 2: вы должны создать файл в папке, той же иерархической, где вы на самом деле хотите разместить его на Elasticbeanstalk. Например, для меня в EBS мне нужно создать пользовательский файл conf в /etc/nginx/conf.d/elasticbeanstalk/
Для этого моя структура папок будет:
и в файл я могу добавить необходимые конфигурации:
location / {
try_files $uri $uri/ /index.php?$args;
}
Ответ №3:
Найдите тип Amazon Linux 2 (AL2) на панели управления Elastic Beanstalk:
Создайте следующую структуру каталогов из корневого каталога вашего приложения:
.platform/nginx/conf.d/
Создайте следующий файл:
.platform/nginx/conf.d/01_custom_ngix.conf
добавьте следующее в созданный вами файл 01_custom_ngix.conf:
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
Git зафиксирует ваши изменения (обязательно сделайте это перед развертыванием, потому что ваш код не будет развернут при использовании eb deploy, если вы не зафиксируете свои изменения)
Разверните свой код:
> eb deploy
параметры: eb deploy —подробный —debug
Проверьте свой http-ответ с помощью http cli:
> http https://name-of-nodejs-server.domain.com
вывод:
HTTP/1.1 200 OK
Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length,Content-Range
Connection: keep-alive
Content-Length: 22
Content-Type: text/html; charset=utf-8
Date: Thu, 26 Aug 2021 02:33:30 GMT
ETag: W/"16-dDAEIDLSKDKGJGJGKDLASE"
Server: nginx/1.20.0
X-Powered-By: Express
Выполнено
Необязательно, вы также можете увеличить свой client_max_body_size, добавив следующее в свой 01_custom_ngix.conf:
client_max_body_size 1000M;
client_body_buffer_size 100M;
....
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;