nginx www domain не работает при перенаправлении - PullRequest
0 голосов
/ 06 апреля 2020

У меня проблемы с перенаправлением контента с http://www.example.com. Другими словами, http://example работает нормально и перенаправляет на https, а http://www.example.com - нет.

Ниже приведен мой nginx config

server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  return 301 https://www.example.com$request_uri;
}

server {
 listen 80;
 listen [::]:80;
 server_name www.example.com;
 return 301 https://www.example.com$request_uri;
}

server {

listen 443 ssl http2;
server_name www.example.com;

sendfile on;

ssl_certificate /usr/share/example_chain.crt;
ssl_certificate_key /usr/share/7a45ae3816f4bc8f.pem;
default_type application/octet-stream;

gzip on;
gzip_http_version 1.1;
gzip_disable      "MSIE [1-6]\.";
gzip_min_length   256;
gzip_vary         on;
gzip_proxied      expired no-cache no-store private auth;
gzip_types        text/plain text/css application/json application/javascript application/x- 
javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level   9;

root /usr/share/nginx/html;

location / {
  try_files $uri $uri/ /index.html =404;
 }

}

Кроме того, у меня есть контейнер docker, который обслуживает запрос от порта 443 моего экземпляра ec2 к порту 443 внутри docker контейнер.

До того, как у меня было это ->

server {
  listen 80;
  listen [::]:80;
  server_name www.example.com example.com;
  return 301 https://www.example.com$request_uri;
}

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете использовать модуль IF в nginx, чтобы решить эту проблему. См. Ниже конфигурацию.

server {
         listen 80;
         server_name example.com www.example.com;
         return 301 https://www.example.com$request_uri;
}

server {
        listen 443;
        server_name example.com;
        root /var/www/html;
        index index.html index.php;

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


        ssl on;
        ssl_certificate /etc/nginx/ssl/cert.crt;
        ssl_certificate_key /etc/nginx/ssl/key.key;
        ssl_session_timeout 5m;

        if ($scheme = http) {
                 rewrite ^/(.*)$ https://www.example.com/$1 permanent;
         }

         if ($host !~* ^www\.) {
                 rewrite ^/(.*)$ https://www.example.com/$1 permanent;
         }


}
...