Ich richte ein Docker-Image mit installiertem nginx-lua ein. Das Szenario besteht in einer Standardauthentifizierung für die Bereitstellung, nicht jedoch für die Produktion. Meine Idee war, eine ENV-Variable mit dem Namen der Bühne zu haben und den Wert in der nginx.conf-Datei zu überprüfen.NGINX-Basisauthentifizierung basierend auf Umgebungsvariable
Der Inhalt der docker-compose.yml
-Datei (für die Inszenierung und für die Produktion wird die Bühne env prod
natürlich):
docs-router:
build: ./nginx
environment:
- API_BASE_URI=staging.example.com
- DOCS_STATIC_URI=docs-staging.example.com
- STAGE=staging
ports:
- "8089:8089"
- "8090:8090"
Der Inhalt der nginx.conf
Datei:
...
env API_BASE_URI;
env DOCS_STATIC_URI;
env STAGE;
...
http {
server {
listen 8089 default_server;
charset utf-8;
resolver 8.8.8.8;
access_log off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~ ^(/.*\.(?:apib|svg))?$ {
set_by_lua_block $api_base_uri { return os.getenv("API_BASE_URI") }
set_by_lua_block $stage { return os.getenv("STAGE") }
set $unprotected "prod";
if ($stage = $unprotected) {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
proxy_pass https://$api_base_uri$1;
proxy_set_header Host $api_base_uri;
}
...
}
}
Aber es ist funktioniert nicht. Irgendeine Idee, wie kann ich das erreichen?
Also was ist Ihre Frage? –
Diese Konfiguration funktioniert nicht und ich würde gerne wissen, dass meine Konfiguration falsch ist, oder diese Implementierung wird nicht mit NGINX funktionieren. –
Mein Ziel ist es, ein einzelnes Docker-Image mit einer korrekten NGINX-Konfiguration zu haben, das zu jedem Zeitpunkt eingesetzt werden kann und eine Authentifizierung nur in einer bestimmten Umgebung anfordert. –