Nginx php को छोड़कर केवल स्थिर फ़ाइलों की सेवा करता है


0

यह वर्तमान कॉन्फ़िगरेशन काम करने के बहुत करीब है। एकमात्र मुद्दा यह है कि यह मेरी php फाइलों को स्टैटिक फाइल्स के रूप में परोस रहा है (इन्हें अपाचे 2 को सौंपने के बजाय, पोर्ट 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;
    }
}

जवाबों:


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 फ़ाइलों की सेवा करना चाहते हैं, इसलिए आप इस पंक्ति में संशोधन करने पर विचार करते हैं:

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

सेवा:

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

या, बहुत सरल, अपने सर्वर रूट को बदलें, यह सुनिश्चित करने के लिए कि यह आपकी पीएचपी फ़ाइलों को स्थानीय रूप से नहीं मिलेगा:

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

सुधार के लिए खोलें, लेकिन मुझे लगता है कि यह सबसे संक्षिप्त विन्यास है जिसे मैं लिख सकता था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.