- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 Django 应用程序与基于 flask+gevent 的 websocket 后端(不支持 SSL)放在同一个域中。我发现虽然直接连接到 websocket 后端有效,但尝试通过 nginx 访问它失败了。这是 nginx 和 websockets 服务器之间通信的 hexdump,包括我用来捕获它的命令:
# ncat -x /dev/stdout -k -vv -l 13006 --sh-exec "ncat localhost 13005"
Ncat: Version 7.60 ( https://nmap.org/ncat )
Ncat: Generating a temporary 1024-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.
Ncat: SHA-1 fingerprint: 6E88 CB89 DEA4 09E4 0863 CD09 90D8 BDFE 3030 A87A
Ncat: Listening on :::13006
Ncat: Listening on 0.0.0.0:13006
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:49634.
NCAT DEBUG: Executing with shell: ncat localhost 13005
[0000] 47 45 54 20 2F 73 69 6E 67 6C 65 2F 3F 72 65 67 GET /sin gle/?reg
[0010] 65 78 3D 6F 66 6F 20 48 54 54 50 2F 31 2E 31 0D ex=ofo H TTP/1.1.
[0020] 0A 55 70 67 72 61 64 65 3A 20 77 65 62 73 6F 63 .Upgrade : websoc
[0030] 6B 65 74 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A ket..Con nection:
[0040] 20 55 70 67 72 61 64 65 0D 0A 53 65 63 2D 57 65 Upgrade ..Sec-We
[0050] 62 53 6F 63 6B 65 74 2D 56 65 72 73 69 6F 6E 3A bSocket- Version:
[0060] 20 31 33 0D 0A 53 65 63 2D 57 65 62 53 6F 63 6B 13..Sec -WebSock
[0070] 65 74 2D 4B 65 79 3A 20 61 45 41 6D 30 65 50 4B et-Key: aEAm0ePK
[0080] 5A 75 65 77 61 37 48 42 73 32 32 32 76 41 3D 3D Zuewa7HB s222vA==
[0090] 0D 0A 53 65 63 2D 57 65 62 53 6F 63 6B 65 74 2D ..Sec-We bSocket-
[00a0] 45 78 74 65 6E 73 69 6F 6E 73 3A 20 70 65 72 6D Extensio ns: perm
[00b0] 65 73 73 61 67 65 2D 64 65 66 6C 61 74 65 3B 20 essage-d eflate;
[00c0] 63 6C 69 65 6E 74 5F 6D 61 78 5F 77 69 6E 64 6F client_m ax_windo
[00d0] 77 5F 62 69 74 73 0D 0A 48 6F 73 74 3A 20 6C 6F w_bits.. Host: lo
[00e0] 63 61 6C 68 6F 73 74 3A 31 33 30 30 36 0D 0A 0D calhost: 13006...
[00f0] 0A .
[0000] 48 54 54 50 2F 31 2E 31 20 31 30 31 20 53 77 69 HTTP/1.1 101 Swi
[0010] 74 63 68 69 6E 67 20 50 72 6F 74 6F 63 6F 6C 73 tching P rotocols
[0020] 0D 0A 55 70 67 72 61 64 65 3A 20 77 65 62 73 6F ..Upgrad e: webso
[0030] 63 6B 65 74 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E cket..Co nnection
[0040] 3A 20 55 70 67 72 61 64 65 0D 0A 53 65 63 2D 57 : Upgrad e..Sec-W
[0050] 65 62 53 6F 63 6B 65 74 2D 41 63 63 65 70 74 3A ebSocket -Accept:
[0060] 20 68 74 4F 6D 31 78 78 78 64 35 6C 30 48 6A 66 htOm1xx xd5l0Hjf
[0070] 4D 43 6C 72 34 54 72 35 4A 51 4D 45 3D 0D 0A 0D MClr4Tr5 JQME=...
[0080] 0A 88 00 ...
[0000] 88 80 C5 99 4F E0 ....O.
这是我正在使用的配置:
/etc/nginx/sites-enabled/default
server {
listen 80;
listen [::]:80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/profound-ssl.conf;
server_name _;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://localhost:8000/;
}
location ^~ /ws/ {
proxy_pass http://localhost:13006/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_redirect off;
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
proxy_set_header Sec-WebSocket-Accept $http_sec_websocket_accept;
}
}
/etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
没有错误被记录,除了后端的错误:
2018-11-15T13:53:17.569402589Z DEBUG:geventwebsocket.handler:Initializing WebSocket
2018-11-15T13:53:17.570682796Z DEBUG:geventwebsocket.handler:Validating WebSocket request
2018-11-15T13:53:17.570698284Z DEBUG:geventwebsocket.handler:Attempting to upgrade connection
2018-11-15T13:53:17.570701438Z DEBUG:geventwebsocket.handler:WebSocket request accepted, switching protocols
2018-11-15T13:53:17.570704839Z DEBUG:geventwebsocket.handler:Closed WebSocket
2018-11-15T13:53:17.570708858Z DEBUG:geventwebsocket.handler:Failed to write closing frame -> closing socket
2018-11-15T13:53:17.570713594Z DEBUG:geventwebsocket.handler:Closed WebSocket
我该如何调试它?我还应该检查什么?
最佳答案
有史以来最奇怪的错误!看来我需要更改:
proxy_pass http://localhost:13006/
到:
proxy_pass http://localhost:13006/ws
关于ssl - Nginx 没有正确转发我的 SSL WebSockets 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53321105/
我有一个无所事事的盒子,已经运行了一段时间,今天,由于某种原因,当我尝试重新启动nginx时,得到了以下提示。 nginx: [emerg] host not found in upstream "w
我注意到,当我使用 ubuntu 命令“nginx”启动 nginx 并执行 systemctl status nginx 时。它表明 systemctl 已禁用。此外,如果我首先使用命令 syste
我的 nginx 配置如下: proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $re
周围有两个配置文件,/etc/nginx/conf.d/default.conf和 /etc/nginx/nginx.conf,但是启用了哪一个呢?我运行的是 CentOS6.4 和 nginx/1.
我的 Nginx 配置仅适用于根位置,所有其他位置都返回“Cannot GET {location}”,其中位置是域后地址的其余部分。 这是我的/etc/nginx/sites-enabled/def
我在 nginx 中为 node.js 服务器设置了反向代理。 server { listen 80; server_name sub.domain.tld; location
我的应用程序将在两个位置提供静态文件,一个是/my/path/project/static,另一个是/my/path/project/jsutils/static。 我很难让网络服务器在两个目录中查找
我的域名注册商的 DNS 访问我的服务器并获取 nginx 默认页面,因此配置正确 我复制了一个当前正在工作的 nginx 虚拟主机,更改了 server_name和 conf 文件的名称,仅此而已。
这个问题在这里已经有了答案: Can't login in to phpPgAdmin (2 个回答) 3年前关闭。 我在centos中遇到了phpPgAdmin登录的奇怪问题,我做了所有需要的事情
我要为PoC进行的操作是向来自动态后端服务器的网页添加href。使用“ subs_filter”可以很容易地添加href,但是我需要使用响应中嵌入的信息来构造href。 是否可以使用LUA处理来自pr
我有网站服务器,它有两个代理(鱿鱼,CF),它们使用不同的 header 来获取真实的 ip。 我猜 nginx 命令 set_real_ip_from ;real_ip_header X-Forwa
在控制台显示如下: Job for nginx.service failed because the control process exited witherror code. See "syste
我有一个问题,我怀疑是 NGINX 问题。基本上,当我尝试登录到我创建的网站时,出现以下错误…… 您要查找的页面暂时不可用。请稍后再试。 有没有人以前遇到过这个? 最佳答案 如果 NGINX 虚拟主机
这是我的 nginx 配置文件: server { listen 80; server_name localhost; location / {
在我的/etc/nginx/nginx.conf 文件中,我有配置。作为:- user nginx; worker_processes 1; error_log /var/log/nginx/e
有谁知道nginx支持软退出吗?这意味着它会一直运行直到所有连接都消失或超时(超过特定时间间隔)并且在此期间也不允许新连接吗? 例如: nginx stop nginx running (2 conn
有没有办法将 Nginx 配置为类似这样的直接服务器返回 (DSR) 负载平衡器: http://blog.haproxy.com/2011/07/29/layer-4-load-balancing-
我通过 apt-get 安装了 Nginx不久前在 Debian 上,我有几个网站在上面。现在我需要安装一些额外的模块,因为我不想搞砸任何事情,所以我想在执行之前仔细检查我的过程。希望这也能帮助其他不
我知道 Apache 的 pagespeed 模块可以使页面访问更快,所以,我想知道 Nginx 是否有等效的模块? 提前致谢! 最佳答案 https://github.com/pagespeed/n
如何将worker_rlimit_nofile设置为一个更大的数字,它可以是或建议最大为多少? 我正在尝试遵循以下建议: 大多数人遇到的第二个最大限制是 与您的操作系统有关。打开一个shell,su给
我是一名优秀的程序员,十分优秀!