ฉันมีคำถามต่อไปนี้เกี่ยวกับบล็อกเซิร์ฟเวอร์ของฉันสำหรับไซต์ WordPress ที่ทำงานบน https เท่านั้น โดยมีการแคชเบราว์เซอร์ nginx และ W3TC

สิ่งแวดล้อม:

Ubuntu - 14.04LTS

nginx - 1.4.6

PHP - 5.5.9

mysql - Ver 14.14 Distrib 5.5.41

คำถามของฉันมีดังนี้:

  1. ลำดับของส่วน "ตำแหน่ง" มีความสำคัญหรือไม่
  2. ลำดับของบล็อก W3TC มีความสำคัญหรือไม่
  3. ฉันเคยเห็นบางที่ที่ใส่ "ssl" ไว้ในคำสั่งฟังแทนที่จะใช้ "เปิด SSL" ทีหลัง -- มันสำคัญ?
  4. ฉันจัดการ www => ไม่ใช่ www ในบล็อกเซิร์ฟเวอร์บนสุด แต่ฉันไม่ได้ระบุที่อยู่http://domain.com => https://domain.com (บังคับ SSL) อย่างชัดเจน- แต่มันก็ทำอย่างนั้นเพื่อ ฉัน. ความคิดใด ๆ ว่าทำไมมันถึงใช้งานได้แม้ว่าฉันจะยังไม่ได้บอก ฉันดีใจที่มันใช้งานได้ ฉันแค่ต้องการเข้าใจว่าทำไมมันถึงได้ผล
  5. คำแนะนำทั่วไปอื่น ๆ เกี่ยวกับการตั้งค่าก็ชื่นชมเช่นกัน ขอบคุณ!

การกำหนดค่าโฮสต์เสมือน:

server {
  server_name www.domain.com;
  rewrite ^(.*) https://domain.com$1 permanent;
}

server {
  listen 443 default_server;
  server_name domain.com;

  root /usr/share/nginx/html/domain.com;
  index index.php index.html index.htm;

  # BEGIN W3TC Browser Cache
  gzip on;
  gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
  # END W3TC Browser Cache

  ssl on;
  ssl_certificate /etc/ssl/certs/domain.com.rapidssl.crt;
  ssl_certificate_key /etc/ssl/private/domain.com.key;
  ssl_session_timeout 5m;
  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
  ssl_prefer_server_ciphers on;

  location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }

  error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }
}
answer

กรุณาอย่าโพสต์คำถามหลายข้อในครั้งเดียว

ขั้นตอนแรก เมื่อคุณไม่รู้ว่าบางสิ่งทำงานอย่างไร ให้ค้นหาเอกสาร ในกรณีของการ Nginx ที่สั่งมีการอธิบายอย่างละเอียดถี่ถ้วนผ่านดัชนีเอกสารคำสั่งอย่างเป็นทางการ

  1. ขึ้นอยู่กับลักษณะการบล็อกที่ตั้ง ลำดับการบล็อกสถานที่นำหน้าไม่สำคัญ แต่ลำดับการบล็อกตำแหน่ง regex คือ เนื่องจากระบบจะเลือกรายการแรกที่ตรงกับ URI คำขอ

  2. ลำดับคำสั่งการกำหนดค่าไม่สำคัญ ยกเว้นบางกรณี เช่นifบล็อก คำสั่ง Gzip ไม่ได้เป็นส่วนหนึ่งของสิ่งเหล่านี้

  3. อันที่จริงssl onเป็นวิธีเก่าในการทำและพารามิเตอร์ listen directive sslเป็นพารามิเตอร์ใหม่ การใช้ssl onบังคับบล็อกเซิร์ฟเวอร์ให้ยอมรับ HTTPS เท่านั้น ในขณะที่การใช้พารามิเตอร์ listen directive อนุญาตให้จัดการทั้ง HTTP และ HTTPs ในบล็อกเซิร์ฟเวอร์เดียวกัน

  4. ที่จริงแล้วคุณขอให้ nginx ทำสิ่งนี้อย่างชัดเจน อีกวิธีหนึ่งที่จะได้ผลลัพธ์แบบเดียวกันคือการใช้return 301 https://domain.com$request_uri. รูปแบบการเขียนซ้ำจะ^(.*)จับคู่ URI ทั้งหมดและจับภาพได้ จากนั้นจะเขียนใหม่อย่างถาวร (301 redirect) ไปยังhttps://domain.com<uri>. อ้างถึงเอกสารประกอบเพื่อทำความเข้าใจว่าคำสั่งการเขียนซ้ำทำงานอย่างไรหากคุณสับสน

  5. คำถามตามความคิดเห็นไม่สอดคล้องกับมาตรฐานของ SF