Nginx
upstream apache_backend {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 80;
server_name _;
root /home/bitrix/www;
index index.php index.html index.htm;
# Статические файлы обрабатывает Nginx
location ~* \.(jpg|jpeg|gif|png|ico|css|js|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|flv|swf|svg|woff|woff2|ttf|eot|mp3|mp4|avi|mov|mpeg|webm)$ {
expires 30d;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
add_header Access-Control-Allow-Origin "*";
try_files $uri @backend;
}
# Все остальное - на Apache
location / {
proxy_pass http://apache_backend;
# КРИТИЧЕСКИ ВАЖНЫЕ ЗАГОЛОВКИ:
# 1. Host передаем БЕЗ порта
proxy_set_header Host $host;
# 2. X-Forwarded-Host тоже БЕЗ порта
proxy_set_header X-Forwarded-Host $host;
# 3. X-Forwarded-Port всегда 80 (порт внешнего доступа)
proxy_set_header X-Forwarded-Port 80;
# 4. X-Forwarded-Proto протокол
proxy_set_header X-Forwarded-Proto $scheme;
# 5. Реальные IP клиента
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 6. ПРИНУДИТЕЛЬНО переопределяем SERVER_PORT в запросе
proxy_set_header SERVER_PORT 80;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# Fallback для статических файлов
location @backend {
proxy_pass http://apache_backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 80;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header SERVER_PORT 80;
}
# Запреты
location ~* /upload/.+\.php$ {
deny all;
return 404;
}
location ~ /\. {
deny all;
return 404;
}
location ~* (\.git|\.env|composer\.json|composer\.lock|README\.md)$ {
deny all;
return 404;
}
# Сжатие
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
}
Apache2
<VirtualHost 127.0.0.1:8080>
ServerName _
ServerAdmin admin@localhost
DocumentRoot /home/bitrix/www
# ВАЖНО: Используем заголовки от Nginx
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
# ПРИНУДИТЕЛЬНО исправляем порт через mod_rewrite
RewriteEngine On
# Если пришел X-Forwarded-Port: 80, устанавливаем SERVER_PORT=80
RewriteCond %{HTTP:X-Forwarded-Port} ^80$
RewriteRule .* - [E=SERVER_PORT:80]
# Используем X-Forwarded-Host
RewriteCond %{HTTP:X-Forwarded-Host} ^(.+)$
RewriteRule .* - [E=HTTP_HOST:%1,E=SERVER_NAME:%1]
<Directory /home/bitrix/www>
Options FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php index.html index.htm
# Дополнительно внутри директории тоже исправляем порт
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} ^80$
RewriteRule .* - [E=SERVER_PORT:80]
</IfModule>
</Directory>
# PHP обработка через FPM (современный способ)
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm-bitrix.sock|fcgi://localhost"
</FilesMatch>
# Заголовки безопасности
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
</VirtualHost>