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.