Ich habe derzeit einen funktionierenden Reverseproxy zu einer lokalen Domäne:https://domain.testmit einem Eintrag in
/etc/hosts
127.0.0.1 domain.test
https://domain.test
geht zu einer Spa-Website, während https://domain.test/api
es zu einem Laravel geht, um alle API-Aufrufe zu verarbeiten.
Ich hätte gerne eine Subdomain zBhttps://sub.domain.testund haben einen anderen API-Server zu handhabenhttps://sub.domain.test/api
Dies ist mein aktueller /etc/nginx/sites-enabled/domain.conf
erster Serverblock, der auf https umleitet.
https://domain.testwird von Spa behandelt, währendhttps://domain.test/apiwird über Port 8282 per Reverse-Proxy übermittelt.
access_log /var/log/nginx/domain-access.log;
error_log /var/log/nginx/domain-error.log;
server {
listen 80 default_server;
listen [::] default_server;
return 301 https://domain.test$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 ipv6only=on default_server;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
server_name domain.test;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_ssl_server_name on;
proxy_set_header Upgrade $http_update;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8282;
}
}
server {
listen 8282;
server_name localhost;
root /home/gmhafiz/domain/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
include fastcgi_params;
}
error_log /var/log/nginx/nginx-proxy-laravel.error.log;
access_log /var/log/nginx/nginx-proxy-laravel.access.log;
}
Ich habe versucht, zwei neue Serverblöcke hinzuzufügen, um die Subdomain zu verwaltenhttps://sub.domain.testund fügte einen Eintrag hinzu zu/etc/hosts
server {
server_name sub.domain.test;
location /api {
proxy_pass http://127.0.0.1:8283;
}
}
server {
listen 8383;
server_name localhost;
root /home/gmhafiz/projects/subdomain/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
include fastcgi_params;
}
error_log /var/log/nginx/nginx-proxy-laravel-subdomain.error.log;
access_log /var/log/nginx/nginx-proxy-laravel-subdomain.access.log;
}
aber es funktioniert nicht, weil ich glaube, dass der erste Server die Weiterleitungen mit 301 blockiert.
Ich kann auch keinen doppelten Serverblock hinzufügen, der sowohl auf 80 als auch auf 443 hört. Ich brauche immer nochhttps://domain.testarbeiten.
server {
listen 80 default_server;
listen [::] default_server;
return 301 https://queue.dribl.test$request_uri;
}
Ich habe beides gemacht sudo nginx -t
undsudo systemctl restart nginx.service
Ich habe einen Test-Controller für die Subdomain-API erstellt, umhttps://sub.domain/api/test curl -k --location --request GET 'https://sub.domain.test/api/test'
aber es kehrt zurück
{"error": "Endpoint not found."}
Beide /var/log/nginx/domain-access.log
haben einen Logeintrag:
127.0.0.1 - - [08/Jan/2021:13:51:36 +1100] "GET /api/test HTTP/2.0" 400 31 "-" "curl/7.68.0"
/var/log/nginx/nginx-proxy-laravel.access.log
127.0.0.1 - - [08/Jan/2021:13:51:36 +1100] "GET /api/test HTTP/1.0" 400 31 "-" "curl/7.68.0"
/var/log/nginx/nginx-proxy-laravel-subdomain.error.log
und /var/log/nginx/nginx-proxy-laravel-subdomain.access.log
sind leer
Daher muss der erste Block eindeutig repariert werden, um den Zugriff auf die Subdomäne zu ermöglichen.