400 неверных запросов на nginx 1.14.0 Ubuntu - PullRequest
2 голосов
/ 22 февраля 2020

Сценарий:

У меня есть два сайта admin.example.com и www.example.com. Веб-сайт администратора разработан в Django 2.2, а фронтальный веб-сайт - в Angular 8. Оба веб-сайта настроены на Nginx 1.14.0 в Ubuntu 18.

Проблема:

Я недавно добавил SSL на этих сайтах. В то время как сайт администратора работает хорошо, веб-интерфейс показывает ошибку 400 неверных запросов с текстом «Простой HTTP-запрос был отправлен на порт HTTPS».

Я нашел это Работа с nginx 400 "Простой HTTP-запрос был отправлен на порт HTTPS "ошибка для той же проблемы, но она не работает в моем случае.

Моя конфигурация для admin.example.com (Django):

server {
    listen 80;
    server_name admin.example.com;
    return 301 https://admin.example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name admin.example.com;
    ssl off;
    ssl_certificate /root/ssl-bundle.crt;
    ssl_certificate_key /root/example.com.key;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/raakesh/backend;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

Конфигурация для example.com (Angular):

server {
    listen 80 default_server;

    server_name www.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 default_server ssl;
    server_name www.example.com;
    root /home/rohangular/websiteangular/dist/angular-website;
    index index.html index.htm;

    access_log /var/log/nginx/example.com/access.log;
    error_log /var/log/nginx/example.com/error.log;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    ssl off;
    ssl_certificate /root/ssl-bundle.crt;
    ssl_certificate_key /root/example.com.key;
}

Я также попытался зарегистрировать эту информацию, используя:

error_log /var/log/nginx/example.com /error.log info;

и нашел это в файле журнала:

[info] 1533 # 1533: * 247 клиент отправил простой HTTP-запрос на порт HTTPS, пока чтение заголовков клиентских запросов, клиент: 188.166.28.57, сервер: www.example.com, запрос: "GET /main-es5.54e5eba613f299b8fae5.js HTTP / 1.1", хост: "www.example.com"

Еще одна проблема, с которой я сталкиваюсь, заключается в том, что этот веб-сайт example.com иногда автоматически начинает работать и иногда показывает ошибку 400 описано выше.

Я не могу понять, пока работает первый, но не второй. Пожалуйста, помогите мне, если я сделал что-то не так или я что-то пропустил.

1 Ответ

0 голосов
/ 22 февраля 2020

Ошибка означает, что вы пытаетесь получить доступ к http://example.com: 443 , что означает, что вы отправляете HTTP-запрос вместо https-запроса, возможно, это опечатка или браузер?
Кроме того, согласно nginx документации ssl выключен; устарел после nginx 1.15 , поэтому я получил бы избавиться от этого.

И добавление следующего, скорее всего, решит вашу проблему:

if ($scheme = http) {
           return 301 https://$server_name$request_uri;
    }

И окончательная конфигурация должна выглядеть следующим образом:

server {
    listen 443 default_server ssl;
    server_name www.example.com;

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }

    root /home/rohangular/websiteangular/dist/angular-website;
    index index.html index.htm;

    access_log /var/log/nginx/example.com/access.log;
    error_log /var/log/nginx/example.com/error.log;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    ssl_certificate /root/ssl-bundle.crt;
    ssl_certificate_key /root/example.com.key;
}
...