Терминация SSL
Начиная с версии 7, фронтенд Пассворка требует обязательного использования HTTPS, поэтому все стандартные установки и конфигурации включают соответствующие настройки. Тем не менее, мы понимаем, что во многих инфраструктурах используется SSL-терминация.
Обратить внимание!
Эти настройки необходимы в следующих случаях:
- В инфраструктуре обязательна SSL-терминация;
- Используется экземпляр Пассворка в контролируемой зоне.
Docker сборка Пассворка
Пример
server {
listen 80;
server_name _;
root /server/www/public;
index index.html;
charset utf-8;
client_max_body_size 100M;
fastcgi_read_timeout 1800;
location ~ ^/.well-known/acme-challenge/ {
access_log /server/log/nginx/certbot.log;
root /var/www/certbot;
}
location = /favicon.ico {
access_log off; log_not_found off;
}
location = /robots.txt {
access_log off; log_not_found off;
}
location ~ /\. {
deny all;
}
location / {
include /server/nginx/extra/security-headers.conf;
include /server/nginx/extra/cors.conf;
if ($request_method = 'OPTIONS') {
return 204;
}
include /server/nginx/extra/csp.conf;
try_files $uri /index.html;
}
location ~ ^/api(/|$) {
include /server/nginx/extra/security-headers.conf;
include /server/nginx/extra/cors.conf;
if ($request_method = 'OPTIONS') {
return 204;
}
fastcgi_pass phpfpm;
fastcgi_param SCRIPT_FILENAME /server/www/public/index.php;
fastcgi_param HTTPS on;
fastcgi_param SERVER_PORT 443;
fastcgi_param HTTP_X_FORWARDED_PROTO https;
fastcgi_param HTTP_X_FORWARDED_PORT 443;
include /etc/nginx/fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff|woff2|ttf|svg)$ {
expires 6M;
log_not_found off;
access_log off;
add_header Cache-Control "public, max-age=2592000";
}
location ~ ^/index\.php(/|$) {
try_files $uri =404;
fastcgi_pass phpfpm;
fastcgi_index /index.php;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param HTTPS on;
fastcgi_param SERVER_PORT 443;
fastcgi_param HTTP_X_FORWARDED_PROTO https;
fastcgi_param HTTP_X_FORWARDED_PORT 443;
add_header Cache-Control "no-store, max-age=0" always;
}
}
}
Если используется стандартная установка в Docker и в качестве портов после терминации применяются 80 и 443, необходимо выполнить следующее:
- shell
cd /<passwork>/ # Перейти в корневое расположение Docker сборки
cp ./conf/nginx/extra/flex.example ./conf/nginx/nginx.conf
docker compose down && docker compose up -d
listen 80
— Nginx слушает порт 80. Если после терминации трафик перенаправляется на другой порт, заменить 80 порт на необходимый.
fastcgi_param HTTPS on;
— Указать бэкенду, что соединение считается защищённым. Это важно для правильного определения схемы запроса при использовании SSO.
fastcgi_param SERVER_PORT 443;
— Установить ожидаемый порт для защищённого соединения. Если используется нестандартный порт для SSL в SSO, изменить 443 порт на необходимое значение.
fastcgi_param HTTP_X_FORWARDED_PROTO https;
— Передать информацию о том, что исходное соединение от клиента шло по HTTPS, даже если SSL был терминирован.
fastcgi_param HTTP_X_FORWARDED_PORT 443;
— Аналогично HTTP_X_FORWARDED_PROTO
, сообщает приложению, что исходный порт клиента был 443. Если используется нестандартный порт для SSL в SSO, изменить 443 порт на необходимое значение.
Ручная установка Пассворка (Apache2\HTTPD)
Если используется установка в Linux за SSL терминатором, необходимо использовать пример для корректной настройки Пассворка.
Пример
<VirtualHost *:80>
ServerName example.passwork.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/public
<Directory /var/www/public>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
ProxyFCGISetEnvIf "true" HTTPS on
ProxyFCGISetEnvIf "true" SERVER_PORT 443
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PROTO https
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PORT 443
</FilesMatch>
</VirtualHost>
ProxyFCGISetEnvIf "true" HTTPS on
— Принудительно установить переменную окружения HTTPS=on
для каждого запроса через FastCGI. Используется для имитации защищённого соединения, если SSL терминируется на внешнем прокси.
ProxyFCGISetEnvIf "true" SERVER_PORT 443
— Установить ожидаемый порт для защищённого соединения. Если используется нестандартный порт для SSL в SSO, изменить 443 порт на необходимое значение.
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PROTO https
— Добавляет заголовок HTTP_X_FORWARDED_PROTO=https
в окружение FastCGI. Это позволяет бэкенду Пассворка корректно определить исходную схему подключения клиента через прокси.
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PORT 443
— Аналогично HTTP_X_FORWARDED_PROTO
, сообщает приложению, что исходный порт клиента был 443. Если используется нестандартный порт для SSL в SSO, изменить 443 порт на необходимое значение.