gpt4 book ai didi

java - 在作为代理工作的 Nginx Ring 处理程序中读取服务器名称

转载 作者:行者123 更新时间:2023-11-30 03:32:39 25 4
gpt4 key购买 nike

我正在尝试使用 nginx-clojure 实现动态代理.

在我的 nginx 配置文件中,我有以下内容:

events {
worker_connections 1024;
}

http {

jvm_path 'myjvmpath';

jvm_var nginx_clojure_jar_path 'myNginx_clojure_jar_path';
jvm_var my_java_handler_jar_path '...';

jvm_options "-Djava.class.path=#{nginx_clojure_jar_path}:#{my_java_handler_jar_path}";


include mime.types;
default_type application/octet-stream;

sendfile on;
keepalive_timeout 65;

gzip on;

server {
listen 8080;

location / {
handler_type 'java';
rewrite_handler_name 'com.poc.MyHandler';
resolver 8.8.8.8;
proxy_pass http://$host$uri;
}
}
}

基本上,我的所有请求都通过 MyHandler 传递:

package com.poc;

import java.util.Arrays;
import java.util.Map;

import nginx.clojure.java.ArrayMap;
import nginx.clojure.java.Constants;
import nginx.clojure.java.NginxJavaRingHandler;
import static nginx.clojure.MiniConstants.*;

public class MyHandler implements NginxJavaRingHandler {

@Override
public Object[] invoke(Map<String, Object> request) {
if (isRequestForbidden(request)) {
return new Object[] { NGX_HTTP_FORBIDDEN, // http status 404
ArrayMap.create(CONTENT_TYPE, "text/plain"), // headers map
"Forbidden" };
} else {
return Constants.PHRASE_DONE;
}
}

private boolean isRequestForbidden(Map<String, Object> request) {
String serverName = (String) request.get(Constants.SERVER_NAME);
return false;
}

}

代码很简单:根据请求(更具体地说,在服务器名称上),我想返回 Constants.PHRASE_DONE (并且请求将发送到目标服务器)或指示站点被禁止的响应。我遇到的问题是 request.get(Constants.SERVER_NAME) 返回空字符串,我希望这里有服务器名称...

我所采取的一般方法有什么问题吗?我是这方面的新手,非常感谢对此的任何建议。

最佳答案

找到了解决方案,所以我将其发布在这里。request.get(Constants.SERVER_NAME) 不包含所请求服务器的名称,而是包含代理服务器的名称。我正在寻找的是带有“Host”键的 header 。阅读方法如下:

private boolean isRequestForbidden(Map<String, Object> request) {
@SuppressWarnings("unchecked")
Map<String, String> headers = (Map<String, String>) request
.get(Constants.HEADERS);
String host = headers.get("Host");

// ...
}

关于java - 在作为代理工作的 Nginx Ring 处理程序中读取服务器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com