ฉันได้สร้างไซต์สแตติกอย่างง่ายซึ่งฉันให้บริการด้วย nginx (จากนักเทียบท่า) ขณะนี้ฉันกำลังพยายามใช้แนวทางปฏิบัติที่ดีที่สุดรวมถึง gzip
ฉันใช้ตัวอย่างการกำหนดค่าที่ฉันพบทางออนไลน์เพื่อตั้งค่าการกำหนดค่าของตัวเอง Gzip ใช้ได้กับเกือบทุกประเภท ยกเว้น css...
ฉันใช้ ขด สำหรับการทดสอบ:
curl -H "ยอมรับการเข้ารหัส: gzip" -I localhost:8400 ผลิต:
HTTP/1.1 200 ตกลง
เซิร์ฟเวอร์: nginx/1.20.2
วันที่: วันพุธที่ 05 มกราคม 2022 12:35:06 GMT
ประเภทเนื้อหา: text/html
การเชื่อมต่อ: มีชีวิตอยู่
Last-Modified: พฤ. 30 ธ.ค. 2564 13:24:15 GMT
Vary: ยอมรับการเข้ารหัส
ETag: W/"61cdb2ff-ff5"
นโยบายความปลอดภัยเนื้อหา: script-src 'self' 'unsafe-inline' 'unsafe-eval' *.transistories.org; frame-src 'ตนเอง'; วัตถุ src 'ตัวเอง'
ตัวเลือก X-Frame: SAMEORIGIN
X-Content-Type-Options: ไร้สาระ
การรักษาความปลอดภัยอย่างเข้มงวดในการขนส่ง: max-age=31536000;
X-XSS-การป้องกัน: 1; โหมด = บล็อก
การเข้ารหัสเนื้อหา: gzip
ในขณะที่ curl -H "ยอมรับการเข้ารหัส: gzip" -I localhost:8400/css/main.css ผลิต:
HTTP/1.1 200 ตกลง
เซิร์ฟเวอร์: nginx/1.20.2
วันที่: วันพุธที่ 05 มกราคม 2022 12:35:02 GMT
ประเภทเนื้อหา: text/css
ความยาวเนื้อหา: 8279
การเชื่อมต่อ: มีชีวิตอยู่
Last-Modified: พุธ 05 ม.ค. 2022 10:46:33 GMT
Vary: ยอมรับการเข้ารหัส
ETag: "61d57709-2057"
หมดอายุ: วันเสาร์ที่ 29 มกราคม 2022 13:38:58 GMT
การควบคุมแคช: max-age=2073600
Pragma: สาธารณะ
การควบคุมแคช: max-age=2073600 สาธารณะ
ยอมรับช่วง: ไบต์
ไฟล์ปรับแต่งหลัก:
ผู้ใช้ nginx;
worker_processes อัตโนมัติ
error_log /var/log/nginx/error.log ประกาศ;
pid /var/run/nginx.pid;
เหตุการณ์ {
worker_connections 1024;
}
http {
รวม /etc/nginx/mime.types;
แอปพลิเคชัน default_type/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$สถานะ $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log หลัก;
ส่งไฟล์บน;
tcp_nopush บน;
keepalive_timeout 65;
เปิด gzip;
gzip_vary บน;
gzip_proxyed ใด ๆ ;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
แอปพลิเคชัน/atom+xml
แอปพลิเคชัน/geo+json
แอปพลิเคชัน/จาวาสคริปต์
แอปพลิเคชัน/x-javascript
แอปพลิเคชัน/json
แอปพลิเคชัน/ld+json
แอปพลิเคชัน/รายการ +json
แอปพลิเคชัน/rdf+xml
แอปพลิเคชัน/rss+xml
แอปพลิเคชัน/xhtml+xml
แอปพลิเคชัน/xml
แบบอักษร/eot
แบบอักษร/otf
แบบอักษร/ttf
รูปภาพ/svg+xml
ข้อความ/css
ข้อความ/จาวาสคริปต์
ข้อความ/js
ข้อความ/ธรรมดา
ข้อความ/xml;
gzip_disable "msie6";
ปิด server_tokens;
รวม /etc/nginx/conf.d/transistories.conf;
}
ไฟล์ปรับแต่งที่รวมอยู่:
เซิร์ฟเวอร์ {
ฟัง 80;
ฟัง [::]:80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log หลัก;
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' *.transistories.org; frame-src 'self'; object-src 'self'";
add_header X-Frame-Options "SAMEORIGIN" เสมอ
add_header X-Content-Type-Options "nosniff" เสมอ;
add_header การขนส่งที่เข้มงวด - ความปลอดภัย "อายุสูงสุด = 31536000;" เสมอ;
add_header X-XSS-การป้องกัน "1; mode=block";
ตำแหน่ง ~* \.(?:ico|css|js|gif|jpe?g|png|eot|woff2?|ttf|svg)$ {
รูท /usr/share/nginx/html;
หมดอายุ 24d;
add_header Pragma สาธารณะ;
add_header แคชควบคุม "อายุสูงสุด = 2073600 สาธารณะ";
}
ที่ตั้ง / {
รูท /usr/share/nginx/html;
ดัชนี index.html;
}
error_page 404 /404.html;
}
ในกรณีที่มีความเกี่ยวข้อง Dockerfile ที่ฉันใช้:
ไฟล์ css ถูกสร้างขึ้นจาก scss โดยใช้ node-sass
จากโหนด:current-alpine3.14 AS builder
เวิร์กดีอาร์ /usr/src/app
แพ็คเกจ COPY*.json ./
ติดตั้ง RUN npm
คัดลอกสินทรัพย์ ./assets
คัดลอก gulpfile.js
คัดลอก src./src
RUN npm รัน build:prod
RUN npm เรียกใช้แผนผังเว็บไซต์
RUN npm เรียกใช้ rss
จาก nginx: ล่าสุด
สำเนา --from=builder /usr/src/app/build /usr/share/nginx/html
คัดลอก nginx/nginx.conf /etc/nginx
คัดลอก nginx/conf.d /etc/nginx/conf.d
มีความคิดใดบ้างว่าทำไมสิ่งนี้ถึงเกิดขึ้นได้ และฉันจะแก้ปัญหานี้ได้อย่างไร
ขอบคุณล่วงหน้า!