Nginx重写规则更改了浏览器中的URL。我看到this one question有同样的问题,但它对我没有帮助。
Nginx版本:
# nginx -v
nginx version: nginx/1.10.1
这是我的配置:
################################################
# PROXY CACHE OPTIONS ##########################
################################################
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G inactive=60s;
proxy_temp_path /var/lib/nginx/proxy 1 2;
proxy_cache_key "$scheme$request_method$host$request_uri";
################################################
# Для заголовка WebSphere - WSIS
map $https $is_ssl {
default false;
on true;
}
rewrite_log on;
large_client_header_buffers 4 64k;
#upstream websphere {
# # Health-monitored upstream groups must be stored in shared memory
# zone backend 64k;
# server s1erinyet:10039;
# server s2erinyet:10039;
#}
################################################
## SERVER SECTION START ########################
################################################
server {
listen 80;
server_name taliat.erp;
################################################
### SSL FOR ESIA ###############################
################################################
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
################################################
# Разрешаем только определенные методы
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
################################################
## LOCATION / SECTION START ####################
################################################
location / {
# here is haproxy on 8888
proxy_pass http://localhost:8888/;
proxy_cache cache;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
proxy_cache_lock on;
proxy_cache_min_uses 3;
proxy_cache_valid 200 302 120m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache_methods GET HEAD;
add_header X-Cache-Status $upstream_cache_status;
set $no_cache "";
# Any logged-in user's requests will not be cached and served directly by WebSphere. (Cookie based caching rule)
#if ($http_cookie ~* "JSESSIONID*"){
#set $no_cache 1;
#}
# These selected URI's below won't get cahced.
if ($request_uri ~* "(/wps/contenthandler.*)") {
set $no_cache 1;
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
proxy_redirect off;
# Отключили буферинг чтобы портал не нервничал
proxy_buffering off;
proxy_read_timeout 300;
proxy_connect_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
# intercept errors on nginx side
#proxy_intercept_errors on;
################################################
### REWRITE RULES START ########################
################################################
set $original_uri $request_uri;
rewrite "^(\/)$" /wps/portal/ break;
rewrite "^/something\/*$" /wps/portal/Home/something/ break;
################################################
### REWRITE RULES END ##########################
################################################
################################################
### WEBSPHERE HEADERS START ####################
################################################
proxy_set_header X-Rewrite-URL $original_uri;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header "$WSSC" $scheme;
proxy_set_header "$WSPR" $server_protocol;
proxy_set_header "$WSRA" $remote_addr;
proxy_set_header "$WSRH" $host;
proxy_set_header "$WSRU" $remote_user;
proxy_set_header "$WSSN" $server_name;
proxy_set_header "$WSSP" $server_port;
proxy_set_header "$WSIS" $is_ssl;
# Note that these vars are only available if
# NGINX was built with SSL
proxy_set_header "$WSCC" $ssl_client_cert;
proxy_set_header "$WSCS" $ssl_cipher;
proxy_set_header "$WSSI" $ssl_session_id;
# No equivalent NGINX variable for these headers.
proxy_hide_header "$WSAT";
proxy_hide_header "$WSPT";
proxy_hide_header "$WSFO";
proxy_pass_header Set-Cookie;
proxy_pass_header Set-Cookie2;
################################################
### WEBSPHERE HEADERS END ######################
################################################
}
################################################
## LOCATION / SECTION END ######################
################################################
################################################
## ERROR PAGES SECTION START ###################
################################################
error_page 500 502 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
# error 503 redirect to errror503.html
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /503.html break;
}
# error 404 page
error_page 404 /404.html;
location /404.html {
root /usr/share/nginx/html;
}
error_page 404 = @foobar;
location @foobar {
return 301 /;
}
################################################
## ERROR PAGES SECTION END #####################
################################################
}
################################################
## SERVER SECTION END ##########################
################################################
我希望在浏览器中看到: http://servername/something但我没有看到http://servername/wps/portal/Home/something/。我做了什么:
保存原始URI并将其放在标题
中 set $original_uri $request_uri;
proxy_set_header X-Rewrite-URL $original_uri;
在重写前后将X-Rewrite-URL设置为$ request_uri
proxy_set_header X-Rewrite-URL $request_uri;
Apache中的相同配置完美运行:
RewriteEngine on
RewriteRule ^/something\/*$ /wps/portal/something [L,PT]
更新#1: 我尝试使用位置和代理传递
location / {
....
location /opendata {
proxy_pass http://localhost:8888/wps/portal/Home/opendata/;
}
....
}
它也没有帮助我
答案 0 :(得分:0)
proxy_pass
指令可以处理这种情况。请注意@ richard-smith的注释也是正确的,这使我认为你的实例可能没有在配置更改之间完全重新加载,或者你的问题描述。