Пожалуйста, извините за длинную запись - я был бы очень признателен за любую помощь в следующем отношении.
Я пытаюсь настроить мультитенантный поддомен + пользовательский домен с SSL с использованием LetsEncrypt:
(некоторые использовать поддомен, некоторые будут использовать собственный домен)
https://customer1.myapp.com
https://customer2.myapp.com
https://customer1.com (customer sets up A/CNAME recoreds at his DNS provider)
Я нахожусь на экземпляре EC2, использующем Ubuntu OS с именем пользователя 'ubuntu'.
Я узнал из следующих уроков:
https://sandeep.dev/how-we-generate-and-renew-ssl-certs-for-arbitrary-custom-domains-using-letsencrypt-cjtk0utui000c1cs1f7y9ua5n
https://www.digitalocean.com/community/tutorials/how-to-use-the-openresty-web-framework-for-nginx-on-ubuntu-16-04
https://sandro-keil.de/blog/openresty-nginx-with-auto-generated-ssl-certificate-from-lets-encrypt/
Я успешно сделано следующее:
- Установлена необходимая сборка на сервере
- Установите OpenResty (поставляется с собственным Nginx & OpenSSL)
- Установите LuaRocks
- Установка lua -resty-auto-ssl
Создан каталог для resty auto ssl
sudo mkdir /etc/resty-auto-ssl
sudo chown -R ubuntu /etc/resty-auto-ssl
sudo chown -R www-data /etc/resty-auto-ssl
chmod -R 777 /etc/resty-auto-ssl/
Создан резервный самозаверяющий сертификат срок действия которого истекает через 3600 дней
Это мой стартовый файл конфигурации (/usr/local/openresty/nginx/conf/nginx.conf )
(я бы уточнил его, чтобы он соответствовал моим потребностям в перенаправлении и безопасности)
#user nginx;
error_log /usr/local/openresty/nginx/logs/error.log warn;
events {
worker_connections 1024;
}
http {
lua_shared_dict auto_ssl 1m;
lua_shared_dict auto_ssl_settings 64k;
init_by_lua_block {
auto_ssl = (require "resty.auto-ssl").new()
auto_ssl:set("allow_domain", function(domain)
return true
end)
auto_ssl:set("dir", "/etc/resty-auto-ssl")
auto_ssl:init()
}
init_worker_by_lua_block {
auto_ssl:init_worker()
}
# access_log /usr/local/openresty/nginx/logs/access.log main;
server {
listen 443 ssl;
ssl_certificate_by_lua_block {
auto_ssl:ssl_certificate()
}
ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;
root /var/www/myapp.com/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# fastcgi_read_timeout 600;
# }
location ~ /\.ht {
deny all;
}
}
server {
listen 80;
server_name *.myapp.com myapp.com;
location /.well-known/acme-challenge/ {
content_by_lua_block {
auto_ssl:challenge_server()
}
}
location / {
return 301 https://myapp.com$request_uri;
}
}
server {
listen 8999;
location / {
content_by_lua_block {
auto_ssl:hook_server()
}
}
}
}
Я сталкиваюсь с несколькими проблемами, такими как:
Не могу упомянуть пользователя в nginx config - все еще работает без него также
- Попытка упомянуть пользователя в 1-й строке файлов конфигурации дает мне ошибку.
- Так что я закомментировал его и попытался в любом случае
Обезвоженный сбой, но сертификат создан
- постоянно получаю следующую ошибку в моем журнале:
lets_encrypt.lua:40: issue_cert(): auto-ssl: dehydrated failed: env HOOK_SECRET=XXXX HOOK_SERVER_PORT=8999 /usr/local/openresty/luajit/bin/resty-auto-ssl/dehydrated --cron --accept-terms --no-lock --domain myapp.com --challenge http-01 --config /etc/resty-auto-ssl/letsencrypt/config --hook /usr/local/openresty/luajit/bin/resty-auto-ssl/letsencrypt_hooks status: 256 out: # INFO: Using main config file /etc/resty-auto-ssl/letsencrypt/config
- Но он все еще продолжается и создает сертификат, после которого выдает ошибку генератора случайных чисел.
- Иногда, если я удаляю все внутри
/etc/resty-auto-ssl
- это не дает мне таких ошибок.
Не удается найти генератор случайных чисел OpenSSL
- В моем журнале постоянно появляется следующая ошибка:
Can't load ./.rnd into RNG
random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=./.rnd
curl: (22) The requested URL returned error: 500 Internal Server Error
PHP -FPM на nginx поставляется с OpenResty
- Я правильно установил * 12 03 * -fpm и проверили его при использовании nginx standalone.
- Но теперь, когда я использую nginx с openresty, похоже, что он работает
- Ошибка (отображается, когда протестированная конфигурация с использованием: nginx -t команды):
"/usr/local/openresty/nginx/conf/snippets/fastcgi-php.conf" failed (2: No such file or directory)
Не удалось создать сертификат
- Иногда эта ошибка сопровождается ошибкой в вышеуказанной точке № 2:
auto-ssl: could not get certificate for myapp.com - using fallback - failed to get or issue certificate, context: ssl_certificate_by_lua*, client: 123.201.226.209, server: 0.0.0.0:443
set_response_cert(): auto-ssl: failed to set ocsp stapling for xxxx.myapp.com - continuing anyway - failed to get ocsp response: OCSP responder query failed (http://ocsp.int-x3.letsencrypt.org): no resolver defined to resolve "ocsp.int-x3.letsencrypt.org", context: ssl_certificate_by_lua*, client: 123.201.226.209, server: 0.0.0.0:443
connect() to unix:/run/php/php7.4-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 123.201.226.209, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.4-fpm.sock:", host: "xxxx.myapp.com"
При попытке чтобы получить доступ к who1 A на customer1.com, IP-адрес сервера myapp.com
"Error creating new order :: Cannot issue for \"X.X.X.X\": The ACME server can not issue a certificate for an IP address"
ssl_certificate.lua:281: auto-ssl: could not determine domain for request (SNI not supported?) - using fallback - , context: ssl_certificate_by_lua*, client: 45.148.10.72, server: 0.0.0.0:443
- ... где xxxx - это A для customer1.com, который был открыт из браузера
У меня следующие недоразумения:
Должен ли я получить один правильный (платный) подстановочный знак положительного сертификата SSL для myapp.com? (И используйте его как запасной вариант)
- Это охватывает весь мой поддомен, и мне не придется иметь дело с ограничениями на поддомен с помощью letsencrypt.
- Таким образом, я должен использовать только шифровать для пользовательских доменов, таких как customer1.com
Я не уверен, правильно ли настроены мои пользователи и разрешения - любые указатели помогут
Я бы хотел sh мой окончательный nginx конфиг для выполнения следующих потребностей