Назад | Перейти на главную страницу

Вопросы о файле конфигурации vhost для NginX + WordPress + SSL + без www + W3TC

У меня есть следующие вопросы о моем блоке (ах) сервера для сайта WordPress, работающего исключительно на https, с кешированием браузера nginx и W3TC.

Окружающая среда:

Ubuntu - 14.04LTS

nginx - 1.4.6

PHP - 5.5.9

mysql - Версия 14.14, Distrib 5.5.41

У меня следующие вопросы:

  1. Имеет ли значение порядок разделов "местоположение"?
  2. Имеет ли значение порядок блока W3TC?
  3. Я видел кое-где, где в директиве listen помещается ssl вместо ssl on; позже - какое это имеет значение?
  4. Я обрабатываю www => non-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;
  }
}

Пожалуйста, не задавайте несколько вопросов в одном.

Первый шаг, когда вы не знаете, как что-то работает, - это поиск документации. В случае с nginx директивы исчерпывающе объяснены через указатель директив официальной документации.

  1. Это зависит от характера блока расположения. Порядок блоков расположения с префиксом не важен, но порядок блоков расположения регулярных выражений имеет значение, поскольку будет выбран первый, соответствующий URI запроса.

  2. Порядок директив конфигурации не имеет значения, за исключением нескольких случаев, например if блоки. Директивы Gzip в их состав не входят.

  3. по факту ssl on это старый способ сделать это, и параметр директивы listen ssl это новый. Использование ssl on заставляет блок сервера принимать HTTPS только в то время, как использование параметра директивы прослушивания позволяет обрабатывать как HTTP, так и HTTP в одном и том же блоке сервера.

  4. На самом деле вы явно просили nginx сделать это. Другой способ получить тот же результат - использовать return 301 https://domain.com$request_uri. Шаблон перезаписи ^(.*) соответствует всем URI и фиксирует их. Затем он постоянно перезаписывает их (301 редирект) на https://domain.com<uri>. Обратитесь к документация чтобы понять, как работает директива rewrite, если вы запутались.

  5. Вопросы, основанные на мнении, не соответствуют стандартам SF.