AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-350103

rugk's questions

Martin Hope
rugk
Asked: 2016-07-07 03:04:45 +0800 CST

如何在 nginx 的 cookie 名称中使用连字符?

  • 1

我想使用IETF 尚未标准化的新cookie-prefixes 。这些是__Secure-和__Host-。

所以让我们设置这个cookie(这里是服务器返回的标头):

Set-Cookie: "__Host-apple=yummy; Secure; HttpOnly; Path=/"

我现在想在 nginx 中使用$cookie-变量访问这个 cookie。因此,为了进行测试,我使用 echo 模块向我展示 cookie 的值:

location = /wannaeat/ {
        echo $cookie___Host-apple;
}

但是 nginx 总是向我展示-apple。似乎使用连字符 ( -) 来拆分变量。

因为当我例如命名 cookie __Host_apple(和 nginx 变量$cookie___Host_apple)时,nginx 会正确地显示我的值。

我知道我可能可以$http_cookie使用正则表达式来找到正确的 cookie,但这是不可能的,因为我想要mapcookie 值。

nginx cookie http-cookie
  • 1 个回答
  • 3918 Views
Martin Hope
rugk
Asked: 2016-06-01 09:28:28 +0800 CST

如何将 nginx 配置拆分为多行?

  • 21

特别是在配置HPKP标头(或其他一般的长标头)时,将 nginx 配置中的一行拆分为多行会很有用。

这是期望的结果:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; 
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; 
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; 
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; 
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";

但是对于浏览器,它应该只有一行:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";

所以我尝试了一些东西,但我对结果并不满意......

第一次尝试:只是拆分它

add_header Public-Key-Pins '
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";
'

这可行,但curl我可以看到浏览器收到带有所有换行符的标题......

第二次尝试:反斜杠

实际上,在已经链接的文章中,Scott Helme 建议这样做:

add_header Public-Key-Pins ' \
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; \
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; \
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; \
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; \
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; \
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; \
'

但是在我的情况下,这只是添加了斜杠并将它们返回给浏览器,所以这不起作用。

那么我该怎么做呢?

奖金

当然,每一行的注释都是一个很棒的补充:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; # current ECDSA
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; # current RSA (nginx 1.11.0)
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; # backup ECDSA 1
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; # backup ECDSA 2
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; # backup RSA 1
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; # backup RSA 2
configuration nginx
  • 2 个回答
  • 11471 Views
Martin Hope
rugk
Asked: 2016-05-25 13:18:36 +0800 CST

使用 nginx 的 Websocket 反向代理:服务器日志中的请求错误,但在浏览器中有效

  • 2

情况

我正在运行Etherpad,它是通过 nginx 代理的。Etherpad 使用带有 Socket.io 的 Websockets。

我的 nginx 配置或多或少是这个。socket.io 的位置块是这样的:

rewrite /CustomSubDir/socket.io/(.*) /socket.io/$1 break;
proxy_pass http://localhost:CustomPort/;
proxy_redirect   / /CustomSubDir/;
proxy_cookie_path / /CustomSubDir/;

# usual proxy header
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;

# websocket
proxy_set_header Accept-Encoding "";
proxy_http_version 1.1;
# http://nginx.org/en/docs/http/websocket.html
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;

proxy_buffers 8 32k;
proxy_buffer_size 64k;

proxy_buffering off;

什么令人困惑

所以好消息是:一切正常!因此,我不是在问如何让任何事情发挥作用。
最基本的是:尽管一切正常,nginx 总是向我显示错误消息。

怎么了

nginx 在以下位置向我显示了这些错误error.log:

2016/05/24 xx:yy:zz [error] 22197#0: *12059 connect() failed (111: Connection refused) while connecting to upstream, client: SOM.IPA.DDR.EES, server: somedomain.example.com, request: "GET /CustomSubDir/socket.io/?EIO=3&transport=polling&t=1464121868147-3&sid=H2GhIY24t2a40etpAACd HTTP/2.0", upstream: "http://[::1]:CustomPort/socket.io/?EIO=3&transport=polling&t=1464121868147-3&sid=H2GhIY24t2a40etpAACd", host: "somedomain.example.com"
2016/05/24 xx:yy:zz [error] 22197#0: *12070 connect() failed (111: Connection refused) while connecting to upstream, client: SOM.IPA.DDR.EES, server: somedomain.example.com, request: "POST /CustomSubDir/socket.io/?EIO=3&transport=polling&t=1464122037998-5&sid=T-pthraR669TF2cKAACe HTTP/2.0", upstream: "http://[::1]:CustomPort/socket.io/?EIO=3&transport=polling&t=1464122037998-5&sid=T-pthraR669TF2cKAACe", host: "somedomain.example.com"

所以我可以追踪这个请求。原因如下: 1. 这些显然是 Websocket 请求。2. 这些是——而且很特别——POST 请求。

当加载一个 Etherpad 或在失去连接后重新连接到一个 Etherpad 时,只会发出一个请求,它满足这些要求。我可以在浏览器中清楚地看到它,并且可以看到它实时出现在 nginx 错误日志中。这是我浏览器中的请求:

200 POST https://somedomain.example.com/CustomSubDir/socket.io/?EIO=3&transport=polling&t=1464121868143-2&sid=H2GhIY24t2a40etpAACd

它包含(例如)这个有效载荷:

164:42["message",{"component":"pad","type":"CLIENT_READY","padId":"CENSORED","sessionID":"null","password":null,"token":"t.qbszmj[...]","protocolVersion":2}]

服务器回复是:

HTTP/2.0 200 OK
Server: nginx
Date: Tue, 24 May 2016 xx:yy:zz GMT
Content-Type: text/html
Content-Length: 2
access-control-allow-origin: *
Set-Cookie: io=H2GhIY24t[...]
X-Firefox-Spdy: h2

ok

为什么我可以确定这是罪魁祸首

我很确定 POST 请求会导致这种情况。不仅因为它是访问 pad 时带有此 URL 的唯一 POST 请求,我还可以比较行为。因为在同一台服务器上我也运行Etherdraw,它的工作方式非常相似,但它有一个重要区别:它似乎不使用 POST Websocket 请求。
你猜怎么着?error.log是空的。

我的问题

那么我的问题是什么:

  1. 我如何在我的浏览器中看到请求成功(带有正确的服务器回复!)而 nginx 报告我它在日志中失败?
  2. 我怎样才能摆脱这些错误信息?AFAIK 请求不会失败...
ip nginx reverse-proxy ipv6 websocket
  • 1 个回答
  • 3065 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve