Score:0

Nginx http เป็น https เปลี่ยนเส้นทางดาวน์โหลดไฟล์เปล่าแทน

ธง tm

ฉันพยายามเปลี่ยนเส้นทางของฉัน Laravel+vuejs+nuxtjs โครงการจาก http ถึง https แต่เมื่อฉันเข้าไป http://example.com หรือ http://www.example.com ดาวน์โหลดไฟล์เปล่าแทน

ฉันทำอะไรไปแล้ว:

1- การแสดงความคิดเห็น แอปพลิเคชัน default_type/octet-stream และเพิ่ม default_type ข้อความ/html แทนใน nginx.conf

2-กำหนด ประเภท { } default_type "ข้อความ/ธรรมดา"; ใน ที่ตั้ง /{} ของ example.com.conf

เปลี่ยนเส้นทาง 3-nginx ด้วยรหัสด้านล่าง

เซิร์ฟเวอร์{
  ฟัง xx.xx.xx.xx:80;
    server_name example.com www.example.com;
  ส่งคืน 301 https://www.example.com$request_uri;
}

4- พยายามเปลี่ยนเส้นทางด้วยไฟล์ .php ด้วยไฟล์ example.com.conf ต่อไปนี้:

       เซิร์ฟเวอร์ {
          ฟัง 37.152.191.249:80;
          server_name www.example.com ตัวอย่าง.com;

         access_log /usr/local/apache/domlogs/example.com.bytes ไบต์;
        access_log /usr/local/apache/domlogs/example.com.log รวมกัน;
        error_log /usr/local/apache/domlogs/example.com.error.log ข้อผิดพลาด;

        รูท /home/example/public_html/;
        ดัชนี index.php;

   ที่ตั้ง / {
ประเภท { } default_type "ข้อความ/ธรรมดา";
    try_files $uri $uri/ /index.php?$query_string;

}

ตำแหน่ง ~ \.php$ {
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    รวม fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  ปิด fastcgi_intercept_errors;
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}


        ตำแหน่ง ~* "/\.(htaccess|htpasswd)$" {ปฏิเสธทั้งหมด ส่งคืน 404;}

        ปิดการใช้งานลิงก์ if_not_owner จาก=/home/example/public_html;
}

index.php ในรหัส public_html :

    $location = 'https://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 ย้ายอย่างถาวร');
    header('สถานที่: ' . $location);
    ทางออก;

ไม่ได้ผลใด ๆ ข้างต้นและปัญหายังคงมีอยู่

+การกำหนดค่าปัจจุบัน:

รายงาน nginx -t :

nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf ไวยากรณ์ใช้ได้
nginx: การทดสอบไฟล์การกำหนดค่า /etc/nginx/nginx.conf สำเร็จ

ตัวอย่าง.com.ssl.conf :

เซิร์ฟเวอร์{
  ฟัง xx.xx.xx.xx:443 http2 ssl;
    server_name example.com;
        ssl_certificate /etc/pki/tls/certs/example.com.bundle;
        ssl_certificate_key /etc/pki/tls/private/example.com.key;
        ssl_protocols TLSv1.2;
        ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EE3CDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL :!eN$
        เปิด ssl_prefer_server_ciphers;

       ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m;
       ssl_session_timeout 60m;
       ส่งคืน 301 https://www.example.com$request_uri;
}
       เซิร์ฟเวอร์ {
          ฟัง xx.xx.xx.xx:443 http2 ssl;
          server_name www.example.com;

         access_log /usr/local/apache/domlogs/example.com.bytes ไบต์;
        access_log /usr/local/apache/domlogs/example.com.log รวมกัน;
        error_log /usr/local/apache/domlogs/example.com.error.log ข้อผิดพลาด;
        ssl_certificate /etc/pki/tls/certs/example.com.bundle;
        ssl_certificate_key /etc/pki/tls/private/example.com.key;
        ssl_protocols TLSv1.2;
        ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL :!eN$
        เปิด ssl_prefer_server_ciphers;

        ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m;
        ssl_session_timeout 60m;

        รูท /home/example/core/public/;
        ดัชนี index.php;

   ที่ตั้ง / {
  proxy_set_header การเชื่อมต่อ 'อัปเกรด';
    proxy_http_version 1.1;
    proxy_pass https://xx.xx.xx.xx:3000$uri;
    proxy_intercept_errors on;# เพื่อที่จะใช้คำสั่ง error_page จะต้องเปิดใช้งาน
    error_page 404 = @php;
}

ตำแหน่ง @php {
    try_files $uri $uri/ /index.php?$query_string;

}

ตำแหน่ง ~ \.php$ {
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    รวม fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   ปิด fastcgi_intercept_errors;
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;
    fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}


        ตำแหน่ง ~* "/\.(htaccess|htpasswd)$" {ปฏิเสธทั้งหมด ส่งคืน 404;}

        ปิดการใช้งานลิงก์ if_not_owner จาก=/home/example/public_html;

        ที่ตั้ง /.well-known/acme-challenge {
                default_type "ข้อความ/ธรรมดา";
                นามแฝง /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }

        สถานที่ /.well-known/pki-ตรวจสอบ {
                default_type "ข้อความ/ธรรมดา";
                นามแฝง /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }
}


example.com.conf ปัจจุบัน :

เซิร์ฟเวอร์{
  ฟัง xx.xx.xx.xx:80;
    server_name example.com www.example.com;
  ส่งคืน 301 https://www.example.com$request_uri;
}

ฉันยังไม่ได้เพิ่มรายงาน nginx -T เนื่องจากมันแสดงไฟล์การกำหนดค่าที่ไม่เกี่ยวข้องจากเว็บไซต์อื่น

นอกจากนี้เซิร์ฟเวอร์ที่ใช้งานหลายไซต์และเวิร์ดเพรสก็ไม่มีปัญหาในการเปลี่ยนเส้นทางโดยใช้รหัสที่ให้ไว้ #3 เพื่อเปลี่ยนเส้นทาง แต่เมื่อมาถึง เดอะ ไซต์ที่ใช้ nuxtjs ฉันได้รับการดาวน์โหลดไฟล์เปล่าแทน

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างสูง

us flag
คุณไม่จำเป็นต้องเปลี่ยนประเภท MIME เลยสำหรับการเปลี่ยนเส้นทาง คุณแน่ใจหรือไม่ว่า `example.com.conf` ของคุณมี `server_name` ถูกต้อง ไฟล์ `example.com.conf` ปรากฏในเอาต์พุต `nginx -T` หรือไม่
Pc Monk avatar
tm flag
ใช่ มองเห็นได้ใน nginx -T ฉันได้ตรวจสอบแล้วว่าเป็นจำนวนครั้ง (หลังจากการเปลี่ยนแปลงแต่ละครั้ง) และฉันเห็นด้วยกับคุณ ไม่จำเป็นต้องเปลี่ยนประเภท MIME แต่ก็คุ้มค่าที่จะส่งไปยัง php-fpm แทนที่จะดาวน์โหลด
us flag
คุณแน่ใจหรือว่าที่อยู่ IP ในคำสั่ง 'ฟัง' ถูกต้อง หากที่อยู่ไม่ตรงกัน nginx จะไม่ใช้โฮสต์เสมือนนี้
Score:1
ธง tm

ฉันคัดลอกหนึ่งในการกำหนดค่า wordpress nginx ของฉันและแทนที่ไฟล์ xxx เป็นส่วนหนึ่งกับ ชื่อโดเมน และ ปปปป กับ IP เซิร์ฟเวอร์

เซิร์ฟเวอร์ {
        ฟัง yyy.yyy.yyy.yyy:80;
        server_name xxx.com www.xxx.com;
  ส่งคืน 301 https://xxx$request_uri;

        ที่ตั้ง / {
                try_files $uri $uri/ /index.php?$args;
                add_header การขนส่งที่เข้มงวด - ความปลอดภัย "อายุสูงสุด = 31536000";
                add_header X-XSS-Protection "1; mode=block" เสมอ;
                add_header X-Content-Type-Options "nosniff" เสมอ;

                ตำแหน่ง ~.*\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
                        หมดอายุสูงสุด
                }

                ตำแหน่ง ~ [^/]\.php(/|$) {
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        ถ้า (!-f $document_root$fastcgi_script_name) {
                                กลับ 404;
                        }

                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        รวม /etc/nginx/fastcgi_params;
                }

        }

        ตำแหน่ง ~* "/\.(htaccess|htpasswd)$" {ปฏิเสธทั้งหมด ส่งคืน 404;}


        enable_symlinks if_not_owner จาก=/home/domainname/public_html;

        ที่ตั้ง /.well-known/acme-challenge {
                default_type "ข้อความ/ธรรมดา";
                นามแฝง /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }

        สถานที่ /.well-known/pki-ตรวจสอบ {
                default_type "ข้อความ/ธรรมดา";
                นามแฝง /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
        }
}

มันเปลี่ยนเส้นทางไปที่ https โดยไม่ต้องดาวน์โหลดอะไรเลย ฉันได้ย้อนกลับการเปลี่ยนแปลงทั้งหมดที่ฉันได้ทำกับ nginx และ php-fpm กลับเป็นค่าเริ่มต้น

ตอนนี้มันใช้งานได้ แต่ทำไม ?

หลังจากเล่นไปรอบ ๆ สังเกตเห็นการเปลี่ยนตำแหน่งของการกำหนดค่า nginx ที่ใช้งานได้เป็น ตำแหน่ง ~ \.php$ (อันที่ฉันเคยใช้มาก่อน) จะทำให้ปัญหากลับมา แค่นั้นแหละ!

ไม่มีการตรวจสอบเพิ่มเติมว่าทำไม ตำแหน่ง ~ \.php$ ทำ ไม่ ทำงานแต่ ตำแหน่ง ~ [^/]\.php(/|$) ทำ.

หวังว่ามันจะช่วยได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา