Как добавить заголовки HSTS в мое приложение nginx / response на гибком движке приложения?

У меня есть приложение для реагирования, работающее через nginx в гибкой среде движка приложений, с использованием личного домена и SSL, и я хотел бы добавить заголовки HSTS.

Я знаю, из каких ресурсов я могу обнаружить, что код моего приложения должен обслуживать заголовки, а не помещать их непосредственно в какой-либо файл app.yaml,

поэтому я решил, что могу сделать это через свой nginx.conf, как описано в https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

Однако мой блок nginx предназначен для ответа на запросы движка приложения, поэтому на самом деле он слушает только :8080 -

У меня создалось впечатление, что все запросы поступают от движка приложения к: 8080, поэтому я не мог представить, что добавление еще одного серверного блока для прослушивания на 443 что-нибудь сделает?

Может быть, мне лучше, если приложение React как-нибудь будет обслуживать заголовок?

worker_processes 1;

events {
  worker_connections 1024;
}

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  # Logs will appear on the Google Developer's Console when logged to 
this
  # directory.
  access_log /var/log/app_engine/app.log;
  error_log /var/log/app_engine/app.log;

  gzip on;
  gzip_disable "msie6";

  server {
    listen 8080;

    server_name localhost;
    root /src/build;

    if ( $http_x_forwarded_proto = 'http' ) {
      return 301 https://$host$request_uri;
    }

    location /nginx_status {
      stub_status on;
      access_log off;
    }

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

person phlare    schedule 01.09.2018    source источник


Ответы (1)


Что ж, теперь я чувствую себя глупо.

Все, что мне нужно было сделать, это добавить следующую строку в нужном месте:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

Сначала я пытался добавить его чуть выше части if ( $http_x_forwarded..., и я также пробовал это с ключевым словом always в конце, и мое развертывание продолжало терпеть неудачу с этой строкой в ​​нем.

В любом случае, это работает!

полный результирующий файл nginx.conf выглядит следующим образом:

worker_processes 1;

events {
  worker_connections 1024;
}

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  # Logs will appear on the Google Developer's Console 
  # when logged to this directory.
  access_log /var/log/app_engine/app.log;
  error_log /var/log/app_engine/app.log;

  gzip on;
  gzip_disable "msie6";

  server {
    listen 8080;

    server_name localhost;
    root /src/build;

    if ( $http_x_forwarded_proto = 'http' ) {
      return 301 https://$host$request_uri;
    }

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";        

    location /nginx_status {
      stub_status on;
      access_log off;
    }

    location / {
      try_files $uri $uri/ /index.html;
    }
  }
}
person phlare    schedule 02.09.2018
comment
Не могли бы вы принять свой ответ? Для дальнейшего использования сообществом. Если я правильно помню, для этого нужно подождать 2 дня. - person amport; 03.09.2018
comment
Ага, как только смогу, я сделаю это! - person phlare; 03.09.2018
comment
Привет, phlare, можно ли просто установить заголовок Strict-Transport-Security, не влияя на другие параметры гибкости движка приложения по умолчанию? Меня сейчас устраивает, как настроен мой сервер, я просто хочу принудительно использовать HTTPS для всех клиентских подключений. Как бы выглядел nginx.conf, если бы я захотел это сделать? - person Josh; 16.01.2020