NGINX Новичок здесь, я пытаюсь настроить то, что я считаю немного сложной задачей. Мне нужна следующая структура:
www.example.com -- Веб-сайт для компании. На данный момент оба www.example.com а example.com должен перенаправлять на project.example.com.
project.example.com Веб-сайт для проекта
project.example.com/app1 -- Приложение 1 для проекта
project.example.com/app2 -- Приложение 2 для проекта
api.example.com -- API для проекта, прослушивающего порт 3001. Предпочтительно, чтобы такие маршруты, как: www.api.example.com или api.example.com для автоматического перенаправления на https://api.example.com.
Примечание. Я пытаюсь перенаправить все блоки на https.
До сих пор я пробовал следующее и довольно много вариантов здесь:
сервер {
слушать 80;
слушать [::]:80;
имя_сервера example.com www.example.com;
вернуть 302 https://project.$server_name$request_uri;
}
# Перенаправление API на SSL
сервер {
слушать 80;
слушать [::]:80;
имя_сервера api.example.com www.api.example.com;
вернуть 302 https://api.example.com$request_uri;
}
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl http2;
имя_сервера www.api.example.com;
вернуть 302 https://api.example.com$request_uri;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client включен;
}
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl http2;
имя_сервера example.com www.example.com;
корень /var/www/html/example-website;
индекс index.html index.htm index.nginx-debian.html;
вернуть 302 https://project.$server_name$request_uri;
# конфигурация SSL
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client включен;
место расположения / {
try_files $uri $uri/ =404;
}
}
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl http2;
имя_сервера project.example.com www.project.example.com;
корень /var/www/html/проект-сайт;
индекс index.html index.htm index.nginx-debian.html;
# конфигурация SSL
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client включен;
место расположения / {
try_files $uri $uri/ =404;
}
местоположение / приложение1 {
псевдоним /var/www/html/project-app1;
try_files $uri /project-app1/index.html;
}
местоположение / приложение2 {
псевдоним /var/www/html/project-app2;
try_files $uri /project-app2/index.html;
}
}
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl http2;
имя_сервера api.example.com www.api.example.com;
преобразователь 127.0.0.1;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client включен;
место расположения / {
переписать ^/api/?(.*) /$1 break;
прокси_пароль https://127.0.0.1:3001; #API-сервер
прокси_перенаправление выключено;
proxy_set_header Хост $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $ схема;
}
}
Я новичок в NGINX, поэтому я не уверен, что то, что я сделал, нормально или даже близко к тому, что большинство считает хорошей практикой.
Что я достиг до сих пор:
- www.example.com а example.com по умолчанию перенаправляет на сайт project.example.com.
- и... Раньше у меня работали приложения app1 и app2, но я не знаю, что я испортил, что они больше не работают :(
В любом случае, дополнительные вещи, чтобы упомянуть:
- Среда: экземпляр AWS EC2,
- Сертификаты и DNS: Cloudflare.
Образ DNS, объявленный и проксированный через Cloudflare
- Приложения: это приложения Angular, и у меня были проблемы с дочерними маршрутами, такие как:
- project.example.com/app1 -- был доступен (в какой-то момент больше не был)
- project.example.com/app1/home — выдаст ошибку 404 «Не найдено». Насколько мне известно, когда-то мне удалось исправить такую вещь на сервере Apache, поэтому я думаю, что могу найти аналогичное исправление для этого случая для NGINX.
- api.example.com — этот файл даже не перенаправляется с www.api.example.com, и я не могу подключиться к API прямо через конечные точки. Выдает 502 в лучшем случае.
Извините за такой длинный пост, но хотел быть как можно более ясным, и большое спасибо за любую дальнейшую помощь, которую вы могли бы мне оказать для достижения этих целей, очень ценю это.