Standardmäßig erfolgt der Zugriff auf WSO2-Schnittstellen wie Publisher, Developer Portal und Carbon über Port :9443/publisher, :9443/devportal bzw. :9443/carbon. Aber ich schlage nicht vor, dem Kunden aus guten Gründen Endpunkte mit Portnummern anzubieten. Wenn Sie also wie ich benutzerdefinierte Proxy-Pfade wie https://hostname.com/publisher usw. einrichten möchten, benötigen Sie einen Proxy-Server als Front-End für den WSO2-API-Manager. In diesem Tutorial richten wir WSO2 mit NGINX-Reverse-Proxy ein, um eine Proxy-URL der tatsächlichen URL der WSO2-Dienste zuzuordnen, sodass die Clients mit der Proxy-URL auf die Dienste zugreifen können.
Stellen Sie sich ein Szenario vor, in dem Sie WSO2-Dienste wie Herausgeber, Entwicklerportal und Kohlenstoffkonsole wie folgt hosten möchten:
https://tg.com/apim/publisher https://tg.com/apim/devportal https://tg.com/apim/carbon https://tg.com/apim/admin
In den obigen URLs ist „apim ‘ ist der Proxy-Kontextpfad des API-Managers.
So richten Sie WSO2 mit NGINX Reverse Proxy ein
Wenn Sie WSO2 zum ersten Mal einrichten, finden Sie die Installationsschritte in diesem Artikel.
NGINX-Server installieren
Schritt 1: Installieren Sie den NGINX-Server, indem Sie den folgenden Befehl ausführen
sudo apt-get install nginx
Schritt 2: SSL-Zertifikat einrichten. Sie können entweder ein selbstsigniertes Zertifikat für den Entwicklungsserver einrichten oder eines von LetsEncrypt für den Produktionsserver erhalten.
Schritt 3 :Erstellen Sie eine neue NGINX-Konfigurationsdatei in /etc/nginx/conf.d/wso2.conf und kopieren Sie den folgenden Text und fügen Sie ihn ein.
server {
listen 443 ssl default_server;
listen [::]:443 default_server ipv6only=on;
server_name tg.com www.tg.com;
root /var/www/html;
access_log /var/log/nginx/proxy.log;
ssl_certificate /etc/letsencrypt/live/tg.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/tg.com/privkey.pem; #
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
rewrite \w*(carbon|admin|devportal|publisher|oidc)$ $1/ permanent;
location /apim/ {
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_set_header Host $http_host;
proxy_read_timeout 5m;
proxy_send_timeout 5m;
proxy_pass https://tg.com:9443/;
proxy_redirect https://tg.com/authenticationendpoint/ https://tg.com/apim/authenticationendpoint/;
proxy_redirect https://tg.com/oauth2/ https://tg.com/apim/oauth2/;
proxy_redirect https://tg.com/carbon/ https://tg.com/apim/carbon/;
#proxy_redirect https://tg.com/admin/ https://tg.com/apim/admin/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/ {
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_set_header Host $http_host;
proxy_read_timeout 5m;
proxy_send_timeout 5m;
proxy_pass https://tg.com:8243/;
proxy_redirect https://tg.com:8243/(.*) https://tg.com/api/$1;
}
location /carbon/admin/js/csrfPrevention.js {
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_set_header Host $http_host;
proxy_read_timeout 5m;
proxy_send_timeout 5m;
proxy_pass https://tg.com/apim/carbon/admin/js/csrfPrevention.js;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/am/publisher/v2 {
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://tg.com:9443/api/am/publisher/v2;
proxy_redirect https://tg.com:9443/api/am/publisher/v2 https://tg.com/apim/api/am/publisher/v2;
}
location /api/am/admin/v2 {
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://tg.com:9443/api/am/admin/v2;
proxy_redirect https://tg.com:9443/api/am/admin/v2 https://tg.com/apim/api/am/admin/v2;
}
location /api/am/devportal/v2 {
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://tg.com:9443/api/am/devportal/v2;
proxy_redirect https://tg.com:9443/api/am/devportal/v2 https://tg.com/apim/api/am/devportal/v2;
}
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://tg.com:9443/oidc;
proxy_redirect https://tg.com:9443/oidc https://tg.com/apim/oidc;
}
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://tg.com:9443/authenticationendpoint;
proxy_redirect https://tg.com:9443/authenticationendpoint https://tg.com/apim/authenticationendpoint;
}
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://tg.com:9443/oauth2;
proxy_redirect https://tg.com:9443/oauth2 https://tg.com/apim/oauth2;
proxy_redirect https://tg.com:9443/authenticationendpoint https://tg.com/apim/authenticationendpoint;
proxy_redirect https://tg.com:9443/devportal https://tg.com/apim/devportal;
proxy_redirect https://tg.com:9443/publisher https://tg.com/apim/publisher;
}
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://tg.com:9443/logincontext;
proxy_redirect https://tg.com:9443/logincontext https://tg.com/apim/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://tg.com:9443/commonauth;
proxy_redirect https://tg.com:9443/commonauth https://tg.com/apim/commonauth;
}
location /api/am/service-catalog/v0{
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://tg.com:9443/api/am/service-catalog/v0;
proxy_redirect https://tg.com:9443/api/am/service-catalog/v0 https://tg.com/apim/api/am/service-catalog/v0;
}
location /uansandbox{
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://tg.com:8443/uansandbox;
proxy_redirect https://tg.com:8443/uansandbox https://tg.com/uansandbox;
}
location /uansandbox/uploadtoken{
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://tg.com:8443/uansandbox/uploadtoken;
proxy_redirect https://tg.com:8443/uansandbox/uploadtoken https://tg.com/uansandbox/uploadtoken;
} }
Schritt 4: Speichern Sie die Datei und führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Konfiguration fehlerfrei ist.
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Schritt 5: Starten Sie den NGINX-Server neu
# systemctl restart nginx
API-Manager-Konfigurationen aktualisieren
Schritt 6: Fügen Sie die folgenden Hosteinträge hinzu
127.0.0.1 tg.com
Schritt 7: Aktualisieren Sie die Bereitstellungskonfigurationsdatei wie unten und fügen Sie die folgenden Konfigurationen hinzu oder aktualisieren Sie sie.
# vim <API_M>/repository/conf/deployment.toml
[server]
hostname = "tg.com"
base_path = "${carbon.protocol}://${carbon.host}:${carbon.management.port}/apim"
server_role = "default"
node_ip = "127.0.0.1"
mode = "single" #single or ha
proxy_context_path = "/apim" [apim.devportal] url = "https://tg.com/apim/devportal"
[transport.https.properties] proxyPort = 443
Hinweis: Denken Sie daran, den Hostnamen base_path mit dem Suffix „/apim“ zu ändern ‘ und proxy_context_path, also ‘/apim ‘.
Schritt 7: Aktualisieren Sie web.xml.j2 Datei, die sich unter „
Und fügen Sie die folgende Konfiguration auf derselben Ebene von <context-param> hinzu Knoten.
<context-param> <param-name>contextPath</param-name> <param-value>apim</param-value> </context-param>
Schritt 8: Aktualisieren Sie die Webkonfigurationsdateien unter app:{ }
#vim
context: '/apim/publisher', // Note the leading `/` and no trailing `/`
proxy_context_path: '/apim',
customUrl: { // Dynamically set the redirect origin according to the forwardedHeader host|proxyPort combination
enabled: true,
forwardedHeader: 'X-Forwarded-Host',
},
#vim
context: '/apim/devportal',
proxy_context_path: '/apim',
customUrl: {
enabled: true,
forwardedHeader: 'X-Forwarded-Host',
},
#vim
context: '/apim/admin', // Note the leading `/` and no trailing `/`
proxy_context_path: '/apim',
customUrl: { // Dynamically set the redirect origin according to the forwardedHeader host|proxyPort combination
enabled: true,
forwardedHeader: 'X-Forwarded-Host',
}, Schritt 9: Starten Sie den WSO2 API Manager neu
#<API_M/bin/api-manager -restart
Das ist es! Fahren Sie jetzt fort und greifen Sie über die benutzerdefinierten Proxy-URLs auf alle WSO2-Dienste zu.
Referenzen:
- WSO2 mit NGINX Reverse Proxy einrichten
- Grund für das Hinzufügen der X-Forwarded-For-Header-Einstellung.
- Probleme mit Reverse-Proxy für DevPortal und Publisher.