Nginx écrase les arguments contenant des lacunes

Cela devrait être facilement, mais j'ai essayé d'obtenir la syntaxe d'expression régulière correcte pour réécrire dans un certain endroit. En bref, je dois trouver une ligne spécifique d'une requête avec des espaces, puis transférer les mêmes arguments sur le serveur Web interne. Qu'est-ce qui manque ici?

Cet endroit est:

     location = /SubDirectory/ {
if ($args !~* "Report Files"){ #Contains Spaces
set $report "LongString_guest.jsp?reportName=Report with several spaces&reportPath=/Share/Reports/REPORT&appSwitcherDisabled=true";
rewrite ^(.*)$ $report break;
}
proxy_pass [url=https://srvweb;]https://srvweb;[/url] #upstream loadbalanced servers

Nous avons une page SAS 9.4 VisualAnalyticsViewer Sur un autre hôte, que j'aimerais imaginer publiquement sur 443. Serveur interne. SAS Lancement Apache Tomcat et n'écoute que 8343. Je préférerais ne pas changer chaque opérateur proxy_pass dans le champ SAS ou personnaliser ses ports uniquement pour qu'une page soit disponible via le port 443, si possible. Actuellement, nos serveurs Web ont des références en utilisant IFrames sur des serveurs internes plus 8343, Ce qui fonctionne, mais limite l'accès à l'accès général de l'utilisateur en raison des restrictions du pare-feu distant. Je voudrais poster Nginx Avant le serveur Tomcat, Alors il a écouté 443. Mon problème est lié au traitement des espaces dans l'opérateur de réécriture. Quelqu'un peut-il me montrer la syntaxe correcte ou une expression régulière sur la manière de y parvenir?

Veuillez noter; Contourne Nginx Et insérer une URL interne complète avec des espaces d'un navigateur local fonctionne vraiment.

Scénario d'application:

External Client Request:

[url=https://apppub.domain.com/appVisualAnalyticsViewer]https://apppub.domain.com/appVisualAnalyticsViewer[/url] Or,

[url=https://apppub.domain.com/appVisualAnalyticsViewer/VisualAnalyticsViewer_guest.jsp?reportName=Report]https://apppub.domain.com/appV ... eport[/url] with Spaces&reportPath=/Some Data Path with Spaces/SubFolder/REPORT&appSwitcherDisabled=true


Serveur proxy. Nginx Vérifie la chaîne de requête URI, puis écrase ou l'ajoute au serveur interne SAS à travers le port 8343.

Nginx Reverse Proxy:

[url=https://appint.domain.com:8343/appVisualAnalyticsViewer/VisualAnalyticsViewer_guest.jsp?reportName=Report]https://appint.domain.com:8343 ... eport[/url] with Spaces&reportPath=/Some Data Path with Spaces/REPORT&appSwitcherDisabled=true


Réponse du client:

https://apppub.domain.com/appV ... ewer/
(Supprimer une chaîne de requête à partir d'une URL du navigateur de client distant)

Vous trouverez ci-dessous des configurations complètes. apppub.conf (Seulement sur ce site), response.conf et proxy.conf, qui sont utilisés par plusieurs sites sur le même serveur proxy.


Nginx Config:

upstream appint {
least_conn;
server appint.domain.com:8343;
}

server {

listen 80;
server_name apppub.domain.com;

access_log off;
autoindex off;

location / {
# Rate limit first 6 requests and burst next 4. Reject everything else
limit_req zone=one burst=10 delay=6;
return 301 https://$server_name$request_uri;
}

}

server {

listen 443 ssl;

server_name apppub.domain.com;

# Site Specific Logging Metrics
access_log /var/log/nginx/apppub.access.log main_ext;
error_log /var/log/nginx/apppub.error.log warn;

autoindex off;

# Load SSL cert and session security
include /etc/nginx/conf.add/domain-ssl.conf;

# Add Security and Caching Headers to responses
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Cache-Control no-cache;
add_header Vary Accept-Encoding;
expires 5m;

# Load client buffers and timeout response
include /etc/nginx/conf.add/response.conf; (See Below)

# Load Gzip mime type compression
include /etc/nginx/conf.add/gzip.conf;


# /appVisualAnalyticsViewer/

location ~ ^/appVisualAnalyticsViewer {

if ($args !~* "Report Name with Spaces"){
set $report "VisualAnalyticsViewer_guest.jsp?reportName=Report with Spaces&reportPath=/Some Data Path with Spaces/REPORT&appSwitcherDisabled=true";
rewrite ^(.*)$ $report break;
**(What's the correct syntax for a rewrite?)**
}

include /etc/nginx/conf.add/proxy.conf; (See Below)
proxy_pass [url=https://appint;]https://appint;[/url]

}

Response Config:
Form POST submissions

client_body_buffer_size 1024K;
Form POST maxiumum size

client_max_body_size 16m;
Max client header size

client_header_buffer_size 2k;
Max time to receive client headers/body from buffer

client_body_timeout 5s; client_header_timeout 5s;
Max time to keep a connection open to clients

keepalive_timeout 5s;
Max time for the client accept/receive a response

send_timeout 5s;
Skip buffering for static files

sendfile on;
Optimize sendfile packets

tcp_nopush on; }

    Proxy Config:

Proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header
X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port;

proxy_set_header Connection ""; # Enable keepalives proxy_set_header
Accept-
Encoding ""; # Optimize encoding proxy_set_header X-Forwarded-Host
$host:$server_port; proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_buffers 32 4m; proxy_busy_buffers_size 25m; proxy_buffer_size 512k;
proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128;
proxy_ignore_headers "Cache-Control" "Expires"; proxy_max_temp_file_size 0; proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 90; proxy_read_timeout 90; proxy_send_timeout 90;
proxy_intercept_errors off;
Invité:

Pour répondre aux questions, connectez-vous ou registre