Node.js 我在使用NodeJS、Express&;设置NGINX反向代理时遇到问题;Socket.io
这是我的第一篇文章。通常,我能够通过阅读现有问题/答案来解决问题,并注意到对重复的不满。我已经仔细研究了我能找到的与此相关的每一个问题,并且让我的轮子旋转了一周。不过,如果我遗漏了什么,请将我链接到任何重复的内容(假定它们不是完全不推荐或不正确的) 我非常确信我的初始错误是在默认配置或nginx配置中 基本上,这里的目标是使我既可以使用普通的nodejs/express服务网页,也可以使用socket.io在服务器和基于电子的客户端之间进行实时通信。我已经阅读了关于在不同端口上分离这些功能的各种问题,这些问题是不必要的,并且会导致此类应用程序需要更多的工作 尝试的解决方案:Node.js 我在使用NodeJS、Express&;设置NGINX反向代理时遇到问题;Socket.io,node.js,express,nginx,socket.io,electron,Node.js,Express,Nginx,Socket.io,Electron,这是我的第一篇文章。通常,我能够通过阅读现有问题/答案来解决问题,并注意到对重复的不满。我已经仔细研究了我能找到的与此相关的每一个问题,并且让我的轮子旋转了一周。不过,如果我遗漏了什么,请将我链接到任何重复的内容(假定它们不是完全不推荐或不正确的) 我非常确信我的初始错误是在默认配置或nginx配置中 基本上,这里的目标是使我既可以使用普通的nodejs/express服务网页,也可以使用socket.io在服务器和基于电子的客户端之间进行实时通信。我已经阅读了关于在不同端口上分离这些功能的各种
位置/socket.io/
添加到默认文件之前)是,当我配置客户端的main.js和server的app.js文件时,什么都不会发生。我尝试删除客户端选项中的端口指令,并在服务器控制台的调试模式下看到这一点:“GET/?EIO=3&transport=polling&t=NJq2Wbs&b64=1 404 57.428 ms-1274”
location/socket.io/
之后,我的问题是它现在说这个端口已经在使用中了。我不知道该如何纠正,因为其他问题都说有可能做到这一点,我肯定我遗漏了一些东西
io(https://exampledomain.com:5001)
和服务器app.js要有server.listen(5001,…)
。运行此命令时,会导致两个控制台都为空(尽管尝试记录客户端或服务器上发生的任何事件)。当检查套接字上是否建立了连接时,它只返回false
# HTTP — redirect all traffic to HTTPS
server {
listen 80;
listen [::]:80 default_server ipv6only=on;
return 301 https://$host$request_uri;
}
# HTTPS — proxy all requests to the Node app
server {
# Enable HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name exampledomain.com;
client_max_body_size 0;
fastcgi_read_timeout 1d;
proxy_read_timeout 1d;
# Use the Let’s Encrypt certificates
ssl_certificate /etc/letsencrypt/live/exampledomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exampledomain.com/privkey.pem;
# Include the SSL configuration from cipherli.st
include snippets/ssl-params.conf;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:5000/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
client_max_body_size 0;
fastcgi_read_timeout 1d;
proxy_read_timeout 1d;
}
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass http://localhost:5000/;
}
}
这是我的nginx.conf代码:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Custom Settings
##
client_max_body_size 0;
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 5;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# 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/*;
}
以下是我认为来自我的app.js的相关代码:
var express = require('express');
var app = express();
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var logger = require('morgan');
app.use(bodyParser.urlencoded({ limit: '500mb',extended: true }));
app.use(bodyParser.json({ limit: '500mb',extended: true}));
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
app.use(express.static(__dirname + "/public"));
server.listen(5000, ()=>{
console.log('server listening on port 5000');
});
module.exports = app;
以下是我的electron客户端中的main.js:
const io = require('socket.io-client');
var socket = io("https://exampledomain.com/socket.io/",{});
socket.connect();
socket.on('welcome', () => {
console.log('welcome received'); // displayed
//socket.emit('test')
});
socket.on('error', (e) => {
console.log(e); // not displayed
});
socket.on('ok', () => {
console.log("OK received"); // not displayed
});
socket.on('connect', () => {
console.log("connected"); // displayed
//socket.emit('test');
});
var socket2 = io("http://exampledomain.com:5000",{});
socket2.connect();
socket2.on('error', (e) => {
console.log(e); // not displayed
});
socket2.on('ok', () => {
console.log("OK received"); // not displayed
});
socket2.on('connect', () => {
console.log("connected"); // displayed
//socket.emit('test');
});