Nginx ให้บริการเฉพาะไฟล์คงที่ไม่รวม php


0

การกำหนดค่าปัจจุบันนี้ใกล้เคียงกับการทำงาน ปัญหาเดียวก็คือมันจะให้บริการไฟล์ php ของฉันเป็นไฟล์แบบคงที่ (แทนที่จะส่งพวกเขาออกไป apache2 ทำงานบนพอร์ต 81)

ฉันรู้ว่ามันผิดปกติกับบรรทัดlocation ~ .+(?<!\.php)นี้ ฉันมีไวยากรณ์ lookahead เชิงลบผิดหรือไม่

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;
    }
}

คำตอบ:


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;
    }
}

เปิดเพื่อการปรับปรุง แต่ฉันคิดว่านี่เป็นโครงร่างที่กระชับที่สุดที่ฉันสามารถเขียนได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.