0

Я использую puma и nginx для запуска рельсов 3.2 приложения на AWS. Я прерываю свой HTTPS на балансировщике (ELB). Как перенаправить www.mydomain.com на mydomain.com? Мой конфигуратор ниже не работает.Удалить www субдомен в nginx и puma config

user nginx; 
worker_processes auto; 
worker_rlimit_nofile 100000; 

error_log /var/log/nginx/error.log; 
pid  /var/run/nginx.pid; 

events { 
    use epoll; 
    worker_connections 1024; 
    multi_accept on; 
} 

http { 
    include   /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay   on; 

    keepalive_timeout 65; 
    keepalive_requests 200; 
    reset_timedout_connection on; 
    types_hash_max_size 2048; 

    # Load modular configuration files from the /etc/nginx/conf.d directory. 
    # See http://nginx.org/en/docs/ngx_core_module.html#include 
    # for more information. 

    include /etc/nginx/conf.d/*.conf; 

    index index.html index.htm; 

    upstream myapp { 
     # Path to Puma SOCK file 
     server unix:/var/www/nginx-default/myapp/tmp/sockets/puma.sock fail_timeout=0; 
    } 

    server { 
     listen  80; 
     server_name www.my-app.com; 
     return 301 $scheme://my-app.com$request_uri; 
    } 

    server { 
     listen  80; 
     server_name my-app.com; 
     root   /var/www/nginx-default/myapp/public; 

     #charset koi8-r; 

     # set client body size (upload size) 
     client_max_body_size 100M; 

     location/{ 
      proxy_pass http://myapp; # match the name of upstream directive which is defined above 
      proxy_set_header Host $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     } 

     # We don't need .ht files with nginx. 
     location ~ /\.ht { 
      deny all; 
     } 

     open_file_cache max=1000 inactive=20s; 
     open_file_cache_valid 30s; 
     open_file_cache_min_uses 2; 
     open_file_cache_errors on; 
    } 

} 

Если удалить

server { 
    listen  80; 
    server_name www.my-app.com; 
    return 301 $scheme://my-app.com$request_uri; 
} 

и использовать

server { 
    listen  80; 
    server_name localhost; 
    root   /var/www/nginx-default/myapp/public; 

    #... 
} 

он работает, но не обрабатывает WWW субдомен.

ответ

0

Это умозрительный ответ, поскольку я не использую AWS и ELB. Однако, используя $scheme в переадресацией приведет к HTTPS перенаправлены на HTTP:

Если вы не согласны с HTTP на УДР, вы должны перенаправить на HTTPS только с:

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

Однако, если вы принять HTTP или HTTPS на ELB, вы должны иметь возможность использовать заголовок X-Forwarded-Proto, вставленный ELB. Попробуйте следующее:

server { 
    listen  80; 
    server_name www.my-app.com; 
    return 301 $http_x_forwarded_proto://my-app.com$request_uri; 
} 
+0

Я попробовал оба. Все еще не работает. Наш ELB может принимать как http, так и https, но мы перенаправляем их все на https, используя рельсы. –