在对logstash

时间:2015-07-17 12:54:12

标签: angularjs linux http nginx cors

我已经将Logstash 1.5.2配置为使用linux机器上的http输入。

这是我的logstash输入配置:

input {
        http {
                host => "10.x.x.120"
                port => "8500"
        }
}

我可以使用linux机器上的curl -XPOST将数据发送到logstash。

但是当我制作$ http.post(url,postData)时;我的angularJS应用程序请求我收到以下错误:

  

阻止跨源请求:同源策略禁止读取   远程资源

我已经在docker容器中使用nginx在同一个linux机器上托管我的应用程序。 我试图通过在nginx.conf中添加以下行来配置nginx以允许CORS:

    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

但问题仍然存在。

当我从我的浏览器地址栏点击http://10.x.x.120:8500时,我得到'ok'。

enter image description here enter image description here 任何帮助都非常感谢。 感谢。

3 个答案:

答案 0 :(得分:1)

我能够通过使用nginx的反向代理设置来运行。

我修改了我的网址如下: http://10.x.x.120/logs

然后对nginx.conf文件进行了以下更改:

location^~ /logs {
    proxy_pass http://10.x.x.120:8500; 
}

现在,当我的应用程序向http://10.x.x.120:8500/logs发出HTTP POST请求时,它会被重定向到http://10.x.x.120:8500

瞧!! Logstash获取数据,因为它正在侦听端口8500。

答案 1 :(得分:1)

这可能是一个解决方案,具体取决于您key scan的设置,我们使用Logstash插件接受http调用。 http

http {
    response_headers {
        "Content-Type" => "application/x-www-form-urlencoded",
        "Access-Control-Allow-Origin" => "*",
    }
}

答案 2 :(得分:0)

您不仅需要配置POST / GET,还需要配置OPTIONS,这是我正在制作并正在使用的配置

#
# Wide-open CORS config for nginx
#
location / {
     if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        #
        # Om nom nom cookies
        #
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #
        # Custom headers and headers various browsers *should* be OK with but aren't
        #
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        #
        # Tell client that this pre-flight info is valid for 20 days
        #
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 200;
     }
     if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
     if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
}