第一步:
tomcat配置:
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" /> </GlobalNamingResources> <Service name="Catalina"> <Connector connectionTimeout="20000" port="8091" protocol="HTTP/1.1" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine defaultHost="gzjad.gzjerryli.cn" name="Catalina"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> </Realm> <Host appBase="webapps" deployOnStartup="true" autoDeploy="true" name="gzjad.gzjerryli.cn" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="gzjad_access_log" suffix=".txt" /> <Context docBase="website" path="" reloadable="false" /> </Host> <Host appBase="webapps" deployOnStartup="true" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt" /> <Context docBase="hello" path="" reloadable="false" /> </Host> </Engine> </Service> <Service name="Catalina_wnapplet"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8445" /> <Engine defaultHost="wnapplet.gzjerryli.cn" name="Catalina_wnapplet"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> </Realm> <Host appBase="/www/server/tomcat/webapps1" deployOnStartup="true" autoDeploy="true" name="wnapplet.gzjerryli.cn" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="wnapplet_log" suffix=".txt" /> </Host> </Engine> </Service> </Server>
nginx配置:
server { listen 80; listen 443 ssl http2; server_name www.***.com; index index.php index.html index.htm default.php default.htm default.html; root /www/server/tomcat/webapps1/你的项目; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; ssl_certificate /www/server/panel/vhost/cert/www.***.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/www.****.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 #error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 #清理缓存规则 location ~ /purge(/.*) { proxy_cache_purge cache_one $host$1$is_args$args; #access_log /www/wwwlogs/www.***.com_purge_cache.log; } #引用反向代理规则,注释后配置的反向代理将无效 include /www/server/panel/vhost/nginx/proxy/www.***.com/*.conf; include enable-php-00.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/www.***.com.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.well-known{ allow all; } access_log /www/wwwlogs/www.***.com.log; error_log /www/wwwlogs/www.***.com.error.log; }
反向代理:
#PROXY-START/
location /
{
expires 12h;
if ($request_uri ~* "(php|jsp|cgi|asp|aspx)")
{
expires 0;
}
proxy_pass http://www.***.com:8080/你的项目/;
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 REMOTE-HOST $remote_addr;
#持久化连接相关配置
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
location /你的项目/webSocket
{
expires 12h;
if ($request_uri ~* "(php|jsp|cgi|asp|aspx)")
{
expires 0;
}
proxy_pass http://www.***.com:8080/wssdemo/webSocket;
#持久化连接相关配置
proxy_connect_timeout 30s;
proxy_read_timeout 86400s;
proxy_send_timeout 30s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
add_header X-Cache $upstream_cache_status;
}
#PROXY-END/
如果想80端口强制跳转443:
加上这:
server { listen 80; server_name www.***.com; rewrite ^ https://$http_host$request_uri? permanent; if ($http_x_forwarded_proto = 'http'){ return 301 https://$host$request_uri; } }
前端配置:
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"></meta> <title>websocket集群</title> </head> <body> 本服务端口号:[[${port}]],使用redismq实现websocket集群<br/> [[${topic}]] 频道 聊天中。。。<br/> <input id="input_id" type="text" /><button onclick="sendMessage()">发送</button> <button onclick="closeWebsocket()">关闭</button> <div id="message_id"></div> </body> <script type="text/javascript"> document.getElementById('input_id').focus(); var websocket = null; //当前浏览前是否支持websocket if("WebSocket" in window){ var url = "wss://www.***.com/你的项目/webSocket"; websocket = new WebSocket(url); }else{ alert("浏览器不支持websocket"); } websocket.onopen = function(event){ setMessage("打开连接"); } websocket.onclose = function(event){ setMessage("关闭连接"); } websocket.onmessage = function(event){ setMessage(event.data); } websocket.onerror = function(event){ setMessage("连接异常"); } //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = function(){ closeWebsocket(); } //关闭websocket function closeWebsocket(){ //3代表已经关闭 if(3!=websocket.readyState){ websocket.close(); }else{ alert("websocket之前已经关闭"); } } //将消息显示在网页上 function setMessage(message){ document.getElementById('message_id').innerHTML += message + '<br/>'; } //发送消息 function sendMessage(){ //1代表正在连接 if(1==websocket.readyState){ var message = document.getElementById('input_id').value; //setMessage(message); websocket.send(message); }else{ alert("websocket未连接"); } document.getElementById('input_id').value=""; document.getElementById('input_id').focus(); } </script> </html>