Эта текущая конфигурация так близка к работе. Единственная проблема заключается в том, что он обслуживает мои php-файлы как статические файлы (вместо того, чтобы передавать их на apache2, работая на порту 81)

Я знаю, что с этой строкой здесь что-то не так location ~ .+(?<!\.php) . У меня неправильный синтаксис предпросмотра?

server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com;
    index index.php;

    server_name example.com;

    location ~ .+(?<!\.php) {
        try_files $uri $uri @php;
    }

    location @php {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:81;
        proxy_redirect http://127.0.0.1:81/ /;
        proxy_read_timeout 60s;
    }

    location ~ /\.ht {
        deny all;
    }
}

3 ответа3

0

Я обычно...

location / {
            index index.php index.html index.htm;
            try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass_header Set-Cookie;
    fastcgi_pass_header Cookie;
    fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

    fastcgi_pass your_proxy;
    fastcgi_index index.php;
    include fastcgi.conf;
    add_header X-Proxy-Cache-PHP $upstream_cache_status;
}
0

Поскольку вы знаете, что хотите обслуживать все файлы PHP через Apache, вы подумаете об изменении этой строки:

location ~ .+(?<!\.php) {
    try_files $uri $uri @php;
}

чтобы:

location ~ .+(?<!\.php) {
    try_files @php $uri $uri;
}

Или, что намного проще, измените корневой каталог сервера, чтобы он не находил ваши файлы PHP локально:

root /dev/null;

По сути, ваша проблема в том, что nginx действительно может найти нужные ему файлы, поэтому try_files возвращает необработанный PHP. Если вам не нужно / нужно обслуживать статические ресурсы, просто передайте все на бэкэнд, а не ищите локальную копию файла.

0

Вот что я сделал:

apache2.conf

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_pass http://127.0.0.1:81;
proxy_redirect http://127.0.0.1:81/ /;
proxy_read_timeout 60s;

main.conf

server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com;

    server_name example.com;

    location ~ \.php {
        include apache2.conf;
    }

    location / {
        try_files $uri @php;
    }

    location @php {
        include apache2.conf;
    }

    location ~ /\.ht {
        deny all;
    }
}

Открыта для улучшения, но я думаю, что это самая краткая конфигурация, которую я мог написать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .