我不得不努力使它在没有错误的情况下正常工作。
然而,当我在nginx上添加ssl时,服务器发送事件就停止工作了。
如果我直接访问后端服务器,它可以工作,所以问题可能出在nginx上。
有人遇到过这样的问题吗?
以下是相关配置的部分内容:
我的nginx.conf(我还没有使用sites-enabled,并将我的应用程序配置放在这里。基本设置在conf的末尾)。/SecurConfig/api/tutorial/listen - 是事件源。
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
root /data/;
server{
listen 80;
# server_name ajaxdemo.in.ua;
# proxy_set_header Host ajaxdemo.in.ua;
location / {
rewrite ^(.*)$ https://ajaxdemo.in.ua$1 permanent;
}
}
server {
#listen 80;
listen 443 default ssl;
#ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_set_header Host $host;
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;
location / {
root /data/www;
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
if ($http_cookie ~* "jsessionid=([^;]+)(?:;|$)") {
set $co "jsessionid=$1";
}
#proxy_set_header Cookie "$co";
proxy_pass http://127.0.0.1:1666/SecurConfig/;
#proxy_pass http://88.81.229.142:1666/SecurConfig/;
add_before_body /header.html;
add_after_body /footer.html;
}
location /SecurConfig/api/tutorial/listen {
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
##Server sent events set
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffering on;
proxy_buffer_size 8k;
#proxy_cache off;
##
if ($http_cookie ~* "jsessionid=([^;]+)(?:;|$)") {
set $co "jsessionid=$1";
}
#proxy_set_header Cookie "$co";
proxy_pass http://127.0.0.1:1666/;
#proxy_pass http://88.81.229.142:1666/;
}
location /SecurConfig/ {
root /data/www;
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
if ($http_cookie ~* "jsessionid=([^;]+)(?:;|$)") {
set $co "jsessionid=$1";
}
#proxy_set_header Cookie "$co";
proxy_pass http://127.0.0.1:1666/;
#proxy_pass http://88.81.229.142:1666/;
add_before_body /header.html;
add_after_body /footer.html;
}
location ~ \.css$ {
root /data/css/;
}
location /header.html {
root /data/www;
}
location /footer.html {
root /data/www;
}
location ~ \.(gif|jpg|png|jpeg)$ {
root /data/images;
}
}
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 100m;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
}
nginx的错误日志中没有任何错误记录。 但是在访问日志中,也提到了对/SecurConfig/api/tutorial/listen的访问。200代码表示“一切正常”。
Tomcat日志显示对/SecurConfig/api/tutorial/listen的访问通常(例如检查安全访问、接受它并重新发送给控制器)。 如果我在Chrome开发者模式下运行我的页面,我会看到这个错误。“GET /SecurConfig/api/tutorial/listen HTTP/1.1” 200 187 “https://ajaxdemo.in.ua/SecurConfig/api/tutorial/map/11111111” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0”
GET https://ajaxdemo.in.ua/SecurConfig/api/tutorial/listen net::ERR_EMPTY_RESPONSE
更新
好的。当我在互联网上搜索信息时,我让我的SSE页面保持打开状态。10分钟后,我看到我的数据出现了,就像预期的那样。我根据缓冲设置注释了所有设置。
#proxy_buffering on;
#proxy_buffer_size 8k;
#proxy_cache off;
我也注释了参数
#proxy_connect_timeout 300;
#proxy_send_timeout 300;
#proxy_read_timeout 300;
所以这些参数返回到它们的默认值(大约20秒),所有我的数据都在大约20秒后出现。所以我进行了设置。
proxy_connect_timeout 2;
proxy_send_timeout 2;
proxy_read_timeout 2;
数据出现得更快了,但仍为一个整体(3-4个事件同时发生),在启用SSL之前,事件逐一显示。
我还需要你的帮助,并解释我哪里做错了。
更新
这是我的服务器配置,当我“关闭”SSL并且SSE工作时。
SSL关闭-SSE工作
80端口重定向到443 SSL-SSE不工作