พร็อกซีย้อนกลับ Nginx ไม่ผ่าน CSS หรืออิมเมจ


0

ฉันพบปัญหานี้แล้วและพบการอ้างอิงจำนวนมาก แต่ไม่มีวิธีแก้ไขปัญหาหรือวิธีแก้ไขปัญหาที่ปรากฏในกรณีของฉัน ฉันมีตัวเทียบท่าที่มี Nginx ซึ่งทำหน้าที่เป็นพร็อกซีย้อนกลับ SSL สำหรับการตรวจสอบความถูกต้อง ฉันมีคอนเทนเนอร์ Apache ที่ให้บริการแอป Laravel ฉันได้รับ html เสมอ แต่ไม่มี css หรือรูปภาพ ใน Chrome ฉันได้รับ:

ทรัพยากรตีความเป็น Stylesheet แต่ถ่ายโอนด้วย MIME type text / html:

นี่คือ default.conf ของฉันใน nginx / sites /

upstream app {
       server 172.18.0.6;
}
server {

listen 443 ssl default_server;
listen [::]:443 ssl default_server ipv6only=on;
server_name rocket.example.com localhost;
root /var/www/public;
index index.php index.html index.htm;
include /etc/nginx/mime.types;
 # tell users to go to SSL version this time
     if ($ssl_protocol = "") {
     rewrite     ^   https://$server_name$request_uri? permanent;
     }

 add_header Strict-Transport-Security "max-age=15768000";
 ssl_certificate /etc/nginx/rocket.crt;
 ssl_certificate_key /etc/nginx/rocket.key;
 ssl_dhparam /etc/nginx/rocket_dhparam.pem;
 ssl_session_cache shared:SSL:10m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK";
 error_page 497  https://$host:$server_port$request_uri;
 ssl_verify_client on;
 ssl_verify_depth 10;
 ssl_client_certificate /etc/nginx/allcerts.pem;


location / {
     try_files $uri $uri/ /index.php$is_args$args;
     include /etc/nginx/mime.types;
}

location ~ \.php$ {
        proxy_pass http://app;
        proxy_http_version 1.1;
        proxy_set_header Host $host:$server_port;
        proxy_set_header Referer $http_referer;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header X-Client-Verify $ssl_client_verify;
        proxy_set_header X-Client-DN $ssl_client_s_dn;
        proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;

        proxy_send_timeout 86400;
        proxy_read_timeout 86400;
        include /etc/nginx/mime.types;


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

ดังที่ฉันได้กล่าวไปแล้ววิธีการแก้ปัญหาอื่นไม่ได้ผล ทุกคนสามารถเห็นข้อผิดพลาดที่อาจทำให้เกิดปัญหานี้ได้หรือไม่ ฉันวางคำสั่ง proxy_ ไว้ในทั้งสองตำแหน่งโดยมีผลเหมือนกัน ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก


คำตอบ:


0

ตำแหน่งที่มี proxy_pass ตั้งเป็นไฟล์ PHP proxy เท่านั้น สายนี้ตรงนี้

location ~ \.php$ {   

สิ่งแรกที่ฉันจะลองคือการย้ายบล็อกทั้งหมดนั้นไปยังบล็อก "location /" หลัก

การเขียน https ใหม่ของคุณใช้คำสั่ง if ซึ่งไม่เหมาะ - อ่าน " if is evil " หากคุณต้องการให้ลูกค้าใช้ https วิธีที่ดีที่สุดคือการสร้างชุดของเซิร์ฟเวอร์เพื่อส่งต่อเช่นนี้

# Forward non-www requests to www
server {
  listen       80;
  server_name  example.com www.example.com;
  access_log  /var/log/nginx/hr.access.log main buffer=128k flush=1m if=$log_ua;
  return       301 https://www.example.com$request_uri;
}

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

  ssl_certificate /var/lib/acme/certs/***CERT_DIRECTORY/fullchain;
  ssl_certificate_key /var/lib/acme/certs//***CERT_DIRECTORY/privkey;

  # Set up preferred protocols and ciphers. TLS1.2 is required for HTTP/2
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

  access_log  /var/log/nginx/hr.access.log main buffer=128k flush=1m if=$log_ua;

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