नगीनेक्स स्थान में उपसर्ग यूआरएल को फिर से लिखना


10

मेरा nginx config फाइल इस तरह है:

server {
    listen 80;
    listen 443 ssl;
    server_name XXX.com;

    error_log  /log/nginx/xxx.com_error.log;
    access_log /log/nginx/xxx.com_access.log main;

    root /data/www/;
    index index.php index.html index.htm;

    location ~ \.php$ {
        add_header X-Frame-Options SAMEORIGIN;

        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

निम्नलिखित को संतुष्ट करने के लिए हमें nginx को कॉन्फ़िगर करने की आवश्यकता है:

1 / यदि url में उपसर्ग नहीं है "/api/mobile/index.php",and अनुरोध का पोर्ट 80 है, तो इसे https पर पुनर्निर्देशित करें 2 ur यदि url में उपसर्ग है" /api/mobile/index.php",just पर जाएं

इसलिए मैं कॉन्फ़िगर फ़ाइल में सामग्री जोड़ता हूं:

    location ~ ^(?!/api/mobile/index\.php).*$ {
        if ($server_port = "80") {
               return 301 https://$server_name$request_uri;
        }

        rewrite /* $server_name$reqeust_uri last;
    }

अब विन्यास फाइल सामग्री है:

server {
    listen 80;
    listen 443 ssl;
    server_name XXX.com;

    error_log  /log/nginx/xxx.com_error.log;
    access_log /log/nginx/xxx.com_access.log main;

    root /data/www/;
    index index.php index.html index.htm;

    location ~ ^(?!/api/mobile/index\.php).*$ {
        if ($server_port = "80") {
               return 301 https://$server_name$request_uri;
        }

        rewrite /* $server_name$reqeust_uri last;
    }

    location ~ \.php$ {
        add_header X-Frame-Options SAMEORIGIN;

        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

अनुरोध से पहले स्थान से मेल खाता है, दूसरे स्थान से मेल नहीं खाएगा।

इसका मतलब है कि ये अनुरोध php cgi के माध्यम से नहीं जा सकता है।

क्या कोई है जो समस्या को हल करना जानता है?

जवाबों:


4

Nginx केवल एक स्थान से मेल खाता है। कॉन्फिग को पहले स्थान पर भी ले जाएं।

location ~ ^(?!/api/mobile/index\.php).*$ {
    if ($server_port = "80") {
           return 301 https://$server_name$request_uri;
    }

    add_header X-Frame-Options SAMEORIGIN;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

location ~ \.php$ {
    add_header X-Frame-Options SAMEORIGIN;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

लेकिन कुछ स्थिर HTML पृष्ठ अनुरोध हैं जिन्हें https पर पुनर्निर्देशित किया जाना है। वह शर्मिंदा है
जॉर्डनलू

टाइपो में http को https पर पुनर्निर्देशित करने का एक सरल उपाय है जैसे://$server_name$request_uri;
Dlk

क्या आप मुझे बता सकते हैं कि इसे कैसे लिखा जाए? @Dlk
JordanLu

btw, आप पारमेट्स namedकी नकल करने के बजाय स्थान का उपयोग करके इसे सुधार सकते हैं fastcgi
tftd

0

दो अलग-अलग सर्वर संदर्भ का उपयोग करने का विकल्प है, और यदि कथन का उपयोग नहीं किया है ( तो यहां पढ़ें: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ )।

विन्यास हो सकता है:

server {
    listen 80;
    server_name XXX.com;

    error_log  /log/nginx/xxx.com_error.log;
    access_log /log/nginx/xxx.com_access.log;

    root /data/www;
    index index.php index.html index.htm;

    location /api/mobile/index.php {
        rewrite ^(.*)$ https://$host$1 redirect;
    }

    location ~ \.php$ {
        add_header X-Frame-Options SAMEORIGIN;

        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_param;
    }
}

server {
    listen 443 ssl http2;
    server_name XXX.com;

    error_log  /log/nginx/xxx.com_ssl_error.log;
    access_log /log/nginx/xxx.com_ssl_access.log;

    root /data/www;
    index index.php index.html index.htm;

    location ~ \.php$ {
        add_header X-Frame-Options SAMEORIGIN;

        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_param;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.