Конфигурация nginx+apache2 на ubuntu 24.04 для битрикс

Share

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>