Перейти к основному содержимому
Версия: 7.0

Терминация 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, необходимо выполнить следующее:

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 порт на необходимое значение.