Corrigir cabeçalhos no nginx com CORS e http / 2

1

Eu tenho trabalhado na minha configuração nginx por um tempo agora, mas de alguma forma eu pareço ter uma confusão com meus cabeçalhos. Eu tenho http / 2 em execução com o nginx 1.9.12 no Ubuntu 14.04 e estou recebendo um sólido A classificação . No entanto, embora eu tenha obtido a maioria das modificações no cabeçalho, obtenho um F para a segurança dos cabeçalhos .

Acho que isso pode ter a ver com a configuração do CORS que eu copiei . Mas eu simplesmente não consigo ver como.

Veja abaixo meu arquivo de configuração com alguns caminhos recolhidos e algumas diretivas de páginas de erro excluídas para torná-lo mais simples.

Qualquer ajuda é apreciada.

# settings
#
server_tokens  off;


# http to https redirect
#
server {
    listen       80;
    server_name  gel.westpacgroup.com.au;
    return 301   https://$host$request_uri;
}


# ssl and http2 config
#
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  gel.westpacgroup.com.au;

    ssl on;
    ssl_certificate      /path/to/fullchain.pem;
    ssl_certificate_key  /path/to/privkey.pem;

    ssl_session_timeout  1d;
    ssl_session_cache    shared:SSL:50m;
    ssl_session_tickets  off;

    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;
    ssl_dhparam                /path/to/dhparam.pem;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling         on;
    ssl_stapling_verify  on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header  Strict-Transport-Security 'max-age=31536000; includeSubDomains;' always;

    # prevent clickjacking attacks
    add_header  X-Frame-Options 'SAMEORIGIN';

    # disallow circumventing declared MIME types
    add_header X-Content-Type-Options nosniff;

    # X-XSS-Protection
    add_header X-XSS-Protection '1; mode=block';

    # root server
    #
    location / {
        root   /path/to/;
        index  index.html index.htm;

        # Wide-open CORS config for nginx
        #
        if ($request_method = 'OPTIONS') {
            add_header  'Access-Control-Allow-Origin' '*';

            # Om nom nom cookies
            add_header  'Access-Control-Allow-Credentials' 'true';
            add_header  'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

            # Custom headers and headers various browsers *should* be OK with but aren't
            add_header  'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

            # Tell client that this pre-flight info is valid for 20 days
            add_header  'Access-Control-Max-Age' 1728000;
            add_header  'Content-Type' 'text/plain charset=UTF-8';
            add_header  'Content-Length' 0;
            return      204;
        }

        if ($request_method = 'POST') {
            add_header  'Access-Control-Allow-Origin' '*';
            add_header  'Access-Control-Allow-Credentials' 'true';
            add_header  'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header  'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        }
        if ($request_method = 'GET') {
            add_header  'Access-Control-Allow-Origin' '*';
            add_header  'Access-Control-Allow-Credentials' 'true';
            add_header  'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header  'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        }
        if ($request_method = 'GET') {
            add_header  'Access-Control-Allow-Origin' '*';
            add_header  'Access-Control-Allow-Credentials' 'true';
            add_header  'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header  'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        }
    }

    # redirect server error pages to the static error pages
    #

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}
    
por Dominik 18.03.2016 / 23:11

1 resposta

1

Parece-me que esses cabeçalhos não foram adicionados - strict-transport-security, etc. Para usar o add_header você precisa compilar o nginx a partir da fonte com o módulo headers_more incluído. Você fez aquilo? Se não, há um tutorial aqui .

(Atualização - isso era necessário, não sei por quê) Você pode tentar mover os add_headers para dentro de um bloco de localização para ver se funciona melhor.

Faça um teste simples - na sua localização principal, adicione um cabeçalho simples e incondicional e examine-o usando o curl ou o Firefox e a extensão "HTTP HTTP Headers".

add_header Z_TESTHEADER "value"
    
por 19.03.2016 / 01:12