NGINX Începător aici, încerc să configurez ceea ce mi se pare o sarcină cam provocatoare. Am nevoie de următoarea structură:
www.example.com -- Site-ul pentru companie. Deocamdată, ambele www.example.com și example.com trebuie să redirecționeze către project.example.com.
project.example.com Site-ul web pentru proiect
project.example.com/app1 -- Aplicația 1 pentru proiect
project.example.com/app2 -- Aplicația 2 pentru proiect
api.example.com -- API pentru ascultarea proiectelor la portul 3001. De preferință, aș dori rute precum: www.api.example.com sau api.example.com pentru a redirecționa automat către https://api.example.com.
Notă: Încerc să redirecționez toate blocurile către https.
Am încercat următoarele până acum și cam multe variante aici:
Server {
asculta 80;
asculta [::]:80;
server_name example.com www.example.com;
returnează 302 https://project.$server_name$request_uri;
}
# Redirecționare API către SSL
Server {
asculta 80;
asculta [::]:80;
nume_server api.example.com www.api.example.com;
returnează 302 https://api.example.com$request_uri;
}
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl http2;
nume_server www.api.example.com;
returnează 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 activat;
}
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl http2;
server_name example.com www.example.com;
root /var/www/html/example-website;
index index.html index.htm index.nginx-debian.html;
returnează 302 https://project.$server_name$request_uri;
# Configurare SSL
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client activat;
Locație / {
try_files $uri $uri/ =404;
}
}
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl http2;
server_name project.example.com www.project.example.com;
root /var/www/html/project-website;
index index.html index.htm index.nginx-debian.html;
# Configurare SSL
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client activat;
Locație / {
try_files $uri $uri/ =404;
}
locație /app1 {
alias /var/www/html/project-app1;
try_files $uri /project-app1/index.html;
}
locație /app2 {
alias /var/www/html/project-app2;
try_files $uri /project-app2/index.html;
}
}
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl http2;
nume_server api.example.com www.api.example.com;
rezolutor 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 activat;
Locație / {
rescrie ^/api/?(.*) /$1 pauză;
proxy_pass https://127.0.0.1:3001; #Server API
proxy_redirect dezactivat;
proxy_set_header Gazdă $gazdă;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $schema;
}
}
Sunt destul de nou pe NGINX, așa că nu sunt sigur dacă ceea ce am făcut este ok sau chiar aproape de ceea ce majoritatea ar considera bune practici.
Ce am realizat pana acum:
- www.example.com iar example.com redirecționează în mod implicit către site-ul web project.example.com.
- și... Odinioară aveam aplicația1 și aplicația2 funcționând relativ, dar nu știu ce am încurcat că acestea nu mai funcționează :(
Oricum, lucruri suplimentare de menționat:
- Mediu: Instanță AWS EC2,
- Certe și DNS: Cloudflare.
Imagine a DNS declarată și trimisă prin proxy prin Cloudflare
- Aplicații: Acestea sunt aplicații Angular și am avut probleme cu rutele copiilor, cum ar fi:
- project.example.com/app1 -- Era accesibil (la un moment dat, nu mai)
- project.example.com/app1/home -- Ar găsi un 404 Nu a fost găsit. Din câte știu, am reușit să repar așa ceva pe un server Apache cu ceva timp în urmă, de aceea cred că pot găsi o remediere similară pentru acest caz pentru NGINX.
- api.example.com -- Acesta nici măcar nu este redirecționat de la www.api.example.comși nu pot să mă conectez la API nici direct prin punctele finale. Aruncă 502 în cele mai bune cazuri.
Îmi pare rău pentru o postare atât de lungă, dar am vrut să fiu cât mai clar posibil și vă mulțumesc foarte mult pentru orice ajutor suplimentar pe care mi l-ați putea oferi pentru a atinge aceste puncte, apreciez foarte mult.