【问题标题】:Unable to get host headers passed in nginx configuration无法获取在 nginx 配置中传递的主机标头
【发布时间】:2013-07-06 02:38:21
【问题描述】:

我正在尝试建立一个负载平衡、基于 SSL 的 RESTful 系统,使用 nginx 作为前端(后端使用 http)。我在将完整的 URL 路径和一个参数传递给我的应用程序时遇到问题。

我在 /etc/nginx/sites-available/default 中有这个:

upstream backend {
  server 10.200.40.100;
  server 10.200.40.101;
}

server {
  listen  443;
  server_name localhost;
  ssl  on;
  ssl_certificate  /etc/ssl/certs/reverse_chained_star_comtex_com.crt;
  ssl_certificate_key  /etc/ssl/certs/star_comtex_com.key;
  ssl_session_timeout  5m;
  ssl_protocols  SSLv2 SSLv3 TLSv1;
  ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  ssl_prefer_server_ciphers   on;

underscores_in_headers on;
ignore_invalid_headers on;

location / {
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_pass http://backend?$args;
}

但是当我发送请求并在后端查看 apache2 访问日志时,我看到:

10.200.40.102 - - [03/Jul/2013:11:51:50 -0400] "GET /? HTTP/1.0" 401 478 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"

我应该看到这样的东西:

10.200.40.102 - - [02/Jul/2013:11:41:32 -0400] "GET /news/headlines/since/2013-07-02+01:00:00?api_key='xxxxxxx' HTTP/1.1" 401 4889 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"

我的参数名称中确实有一个下划线,这就是我使用 underscores_in_headers 的原因。有什么想法可能出了什么问题?

【问题讨论】:

  • 你试过只用proxy_pass http://backend;吗? get 参数自动传递
  • 我只是在没有 ?$args 的情况下尝试过,现在我在 access.log 中看到了这个:10.200.40.102 - - [08/Jul/2013:13:37:36 -0400] "GET /favicon.ico HTTP/1.0" 401 478 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36" 不确定这是否是进步。

标签: ssl nginx hostheaders


【解决方案1】:

你可以改变 proxy_pass http://backend?$args; 到 proxy_pass http://backend;

会解决这个问题

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2016-07-10
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多