相关疑难解决方法(0)

避免在proxy_pass上使用nginx解码查询参数(相当于AllowEncodedSlashes NoDecode)

我使用nginx作为几个tomcats前面的负载balencer.在我的传入请求中,我编码了查询参数.但是当请求到达tomcat时,参数被解码:

传入nginx的请求:

curl -i "http://server/1.1/json/T;cID=1234;pID=1200;rF=http%3A%2F%2Fwww.google.com%2F"
Run Code Online (Sandbox Code Playgroud)

传入tomcat的请求:

curl -i "http://server/1.1/json/T;cID=1234;pID=1200;rF=http:/www.google.com/"
Run Code Online (Sandbox Code Playgroud)

我不希望我的请求参数被转换,因为在那种情况下我的tomcat会抛出405错误.

我的nginx配置如下:

upstream tracking  {
    server front-01.server.com:8080;
    server front-02.server.com:8080;
    server front-03.server.com:8080;
    server front-04.server.com:8080;
}

server {
    listen 80;
    server_name tracking.server.com;
    access_log /var/log/nginx/tracking-access.log;
    error_log  /var/log/nginx/tracking-error.log;

    location / {
        proxy_pass  http://tracking/webapp;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我当前的apache负载均衡器配置中,我有AllowEncodedSlashes指令来保留我的编码参数:

AllowEncodedSlashes NoDecode
Run Code Online (Sandbox Code Playgroud)

我需要从apache转移到nginx.

我的问题与这个问题完全相反:避免nginx在proxy_pass上转义查询参数

reverse-proxy load-balancing nginx

23
推荐指数
4
解决办法
3万
查看次数

NGINX将%2f转换为正斜杠.我怎么能阻止它?

假设我想在URL中编码文章标题并包含斜杠.如果我对文章标题进行URL编码,我得到:

http://example.com/articles/foo%2fbar/view/
Run Code Online (Sandbox Code Playgroud)

NGINX将此传递给我的FastCGI应用程序,如下所示:

http://example.com/articles/foo/bar/view/
Run Code Online (Sandbox Code Playgroud)

这相当破坏了这个想法.

我注意到如果NGINX正在提供文件,比如/path/to/page.html,那么可以通过以下两个URL之一访问它:

http://example.com/path/to/page.html
http://example.com/path/to%2fpage.html
Run Code Online (Sandbox Code Playgroud)

但是(例如)Apache不是这种情况.

有没有办法解决这个问题?

我试过文档和谷歌没有运气.

谢谢.

UPDATE

nginx配置:

worker_processes  1;
pid ./nginx.pid;
events {
    worker_connections  1024;
}
http {
    server_tokens off;
    server {
        listen 80;
        server_name localhost;
        location /mysite/{
            fastcgi_pass   unix: ./mysite.fcgi.socket;

            fastcgi_param SERVER_NAME $server_name;
            fastcgi_param SERVER_PORT $server_port;
            fastcgi_param SERVER_PROTOCOL $server_protocol;
            fastcgi_param SCRIPT_NAME "/mysite/";
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

url escaping nginx

17
推荐指数
1
解决办法
5957
查看次数

删除www.使用Nginx Rewrite从主机名

我正在尝试配置我的Nginx以www.从主机名中删除.我正在寻找处理可能的子域案例的通用规则.

例如,如果http://www.foo1.sample.com并且http://www.fooX2.sample.com是两个域.

然后我想www.在这些子域之前删除任何子域,并将它们分别重定向到(http://foo1.sample.com并且http://fooX2.sample.com不知道规则中的确切子域.)

谢谢.

rewrite nginx

9
推荐指数
2
解决办法
3421
查看次数

nginx proxy_pass和URL解码

原始网址:/ api/url%2已编码%2F /?with = queryParams

nginx的:

location /api {
    client_max_body_size 2G;
    proxy_pass https://oursite;
}
Run Code Online (Sandbox Code Playgroud)

使用此配置,我可以在通过代理时保留URL编码.如果我在"ourite"之后添加"/",它将解码URL.

问题:

现在代理后的URL仍然包含"/ api /".我只需要在保留URL编码部分的同时删除"/ api /".

nginx

8
推荐指数
1
解决办法
1万
查看次数

Nginx 重写 unencodes url

似乎 Nginx 在与正则表达式一起使用时总是对 url 进行解编码。我有一个重写规则:

location /api/ {
    rewrite /api/(.*)$ $1 break;
    proxy_pass http://127.0.0.1:8000/$1;
}
Run Code Online (Sandbox Code Playgroud)

我想从 usl 中删除 api 但保留路径的其余部分。路径的一部分是电子邮件地址 someone@somewhere.com。我正在通过某人 %40somewhere.com 但 Nginx 正在用 @ 符号将它转回来。

nginx

5
推荐指数
2
解决办法
4029
查看次数

通过HTTPS和Nginx进行RabbitMQ管理

我正在尝试使用nginx通过HTTPS/SSL访问RabbitMQ接口,我无法弄清楚我缺少什么.

这是我的rabbitmq.conf文件:

[
  {ssl, [{versions, ['tlsv1.2', 'tlsv1.1']}]},
  {rabbit, [
      {reverse_dns_lookups, true},
      {hipe_compile, true},
      {tcp_listeners, [5672]},
      {ssl_listeners, [5671]},
      {ssl_options, [
        {cacertfile, "/etc/ssl/certs/CA.pem"},
        {certfile,   "/etc/nginx/ssl/my_domain.crt"},
        {keyfile,    "/etc/nginx/ssl/my_domain.key"},
        {versions, ['tlsv1.2', 'tlsv1.1']}
      ]}
    ]
  },
  {rabbitmq_management, [
    {listener, [
      {port, 15671},
      {ssl,  true},
      {ssl_opts, [
        {cacertfile, "/etc/ssl/certs/CA.pem"},
        {certfile,   "/etc/nginx/ssl/my_domain.crt"},
        {keyfile,    "/etc/nginx/ssl/my_domain.key"},
        {versions, ['tlsv1.2', 'tlsv1.1']}
      ]}
    ]}
  ]}
].
Run Code Online (Sandbox Code Playgroud)

当我重新启动rabbitmq-server时,一切正常

我的nginx文件如下所示:

location /rabbitmq/ {
        if ($request_uri ~* "/rabbitmq/(.*)") {
                proxy_pass https://example.com:15671/$1;
        }
}
Run Code Online (Sandbox Code Playgroud)

现在,我猜测ngnix配置无法解析HTTPS URL,因为我在尝试浏览时遇到504超时错误:

https://example.com/rabbitmq/
Run Code Online (Sandbox Code Playgroud)

显然,这不是正确的FQDN,但SSL证书在没有/ rabbitmq /的情况下工作正常

有没有人能够通过FQDN和HTTPS在外部连接上使用RabbitMQ管理Web界面?

我是否需要在专用于15671端口的nginx配置中创建新的"服务器"块?

任何帮助将非常感激!

https nginx rabbitmq

3
推荐指数
3
解决办法
3830
查看次数