J'ai essayé de créer un proxy inverse pour DevPortal et Publisher en utilisant la configuration Nginx ci-dessous :
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location /publisher {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/publisher;
proxy_redirect https://localhost:9443/publisher https://localhost/publisher;
proxy_redirect https://localhost:9443/oauth2 https://localhost/oauth2;
proxy_redirect https://localhost:9443/oidc https://localhost/oidc;
}
location /devportal {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/devportal;
proxy_redirect https://localhost:9443/devportal https://localhost/devportal;
proxy_redirect https://localhost:9443/oauth2 https://localhost/oauth2;
proxy_redirect https://localhost:9443/oidc https://localhost/oidc;
}
location /api/am/publisher/v1.0 {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/api/am/publisher/v1.0;
proxy_redirect https://localhost:9443/api/am/publisher/v1.0 https://localhost/api/am/publisher/v1.0;
}
location /api/am/store/v1.0 {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/api/am/store/v1.0;
proxy_redirect https://localhost:9443/api/am/store/v1.0 https://localhost/api/am/store/v1.0;
}
location /authenticationendpoint {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/authenticationendpoint;
proxy_redirect https://localhost:9443/authenticationendpoint https://localhost/authenticationendpoint;
}
location /logincontext {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/logincontext;
proxy_redirect https://localhost:9443/logincontext https://localhost/logincontext;
}
location /commonauth {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/commonauth;
proxy_redirect https://localhost:9443/commonauth https://localhost/commonauth;
proxy_redirect https://localhost:9443/oauth2 https://localhost/oauth2;
}
location /oauth2 {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/oauth2;
proxy_redirect https://localhost:9443/oauth2 https://localhost/oauth2;
proxy_redirect https://localhost:9443/authenticationendpoint https://localhost/authenticationendpoint;
proxy_redirect https://localhost:9443/devportal https://localhost/devportal;
proxy_redirect https://localhost:9443/publisher https://localhost/publisher;
}
location /oidc {
index index.html;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://localhost:9443/oidc;
proxy_redirect https://localhost:9443/oidc https://localhost/oidc;
proxy_redirect https://localhost:9443/authenticationendpoint https://localhost/authenticationendpoint;
proxy_redirect https://localhost:9443/publisher https://localhost/publisher;
proxy_redirect https://localhost:9443/devportal https://localhost/devportal;
}
}
J'ai rencontré quelques problèmes :
La variable d'état a une URL complète (cela ne devrait être que la sous-ressource, par exemple : /apis
)
À cause de cela, la dernière redirection vers l'application devportal échoue en raison du mauvais contexte. Le navigateur sera redirigé vers la console carbone.
GET /apis/am/v1.0/publisher/swagger.yaml
ou du GET /apis/am/v1.0/devportal/swagger.yaml
. Il a reçu un code d'état 500 avec une erreur similaire à "Aucun rédacteur de corps de message trouvé pour .. ". Cela ne se reproduit pas dans les environnements Linux.Quoi qu'il en soit, j'ai contourné le premier problème en modifiant manuellement l'URL et le reste semble fonctionner sans problème. J'ai essayé de créer des API à partir de l'éditeur, de les publier et de les appeler à partir du portail de développement.
La déconnexion fonctionne également sans problème.
La raison de la mauvaise URL de redirection est que nous mandatons le port de l'URL de l'application Web qui est utilisé pour la redirection vers l'application Web (en tant que variable d'état). Le port n'est pas obligatoire dans les environnements de proxy inverse. Nous devons supprimer cela. Le correctif doit aller aux fichiers idp.jag dans les applications Web d'éditeur et de portail de développement.
Avec le correctif ci-dessus, tout fonctionne bien.
J'ai également testé avec les dernières modifications et il semble que le problème soit résolu.
Cela ne fonctionne pas encore avec des contextes différents. @isharac y travaille.
Corrigé par https://github.com/wso2/carbon-apimgt/pull/7731