#node.js #socket.io #nestjs
Вопрос:
Я не спал всю ночь из-за этой проблемы. Я думаю, что сделал все, что мог. Наш интерфейс использует https, и серверная часть также использует https. В настоящее время api работает хорошо, но сервер чата продолжает выдавать ошибки ERR_SSL_PROTOCOL_ERROR.
Передним концом является использование нашей комнаты чата https://dongmul.Подключение к магазину:3001/гнездо для чата. Эта проблема, по-видимому, решается путем запроса http://dongmul.Подключение к магазину:3001/чат, но создает только новую ошибку, называемую смешанным контентом.
-Серверная часть nginx (/etc/nginx/сайты-доступно/по умолчанию)-
server {
server_name dongmul.shop;
location / {
proxy_set_header HOST $host;
proxy_pass https://127.0.0.1:3000;
proxy_redirect off;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/dongmul.shop/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dongmul.shop/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
server_name www.dongmul.shop;
location / {
proxy_set_header HOST $host;
proxy_pass https://127.0.0.1:3000;
proxy_redirect off;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/dongmul.shop/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dongmul.shop/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
# 80 is 443
server {
server_name dongmul.shop www.dongmul.shop;
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
-- INSERT --
-Серверная часть main.ts-
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as fs from 'fs';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
async function bootstrap() {
const httpsOptions = {
key: fs.readFileSync(
'/etc/letsencrypt/live/dongmul.shop/privkey.pem',
'utf8'
),
cert: fs.readFileSync(
'/etc/letsencrypt/live/dongmul.shop/cert.pem',
'utf8'
),
ca: fs.readFileSync(
'/etc/letsencrypt/live/dongmul.shop/chain.pem',
'utf8'
)
};
const app = await NestFactory.create<NestExpressApplication>(AppModule, {
cors: true,
httpsOptions
});
app.useStaticAssets(join(__dirname, '..', 'public'));
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true
})
);
await app.listen(3000);
}
bootstrap();
-Внутренний чат.шлюз.ts-
import {
SubscribeMessage,
WebSocketGateway,
OnGatewayInit,
WebSocketServer,
OnGatewayConnection,
OnGatewayDisconnect
} from '@nestjs/websockets';
import { Socket, Server } from 'socket.io';
import { Logger } from '@nestjs/common';
import { ItemChatJoinDto } from './dto/itemChatJoin.dto';
import { ChatService } from './chat.service';
import { ItemChatDto } from './dto/itemChat.dto';
import * as jwt from 'jsonwebtoken';
import { AutoJoinDto } from './dto/autoJoin.dto';
import { KickUserDto } from './dto/kickUser.dto';
import { ExchangeDto } from './dto/exchange.dto';
import { MessageService } from 'src/message/message.service';
import * as fs from 'fs';
// **************************************
// * gateway: chat
// * programer: DongGyun Won
// **************************************
const httpsOptions = {
key: fs.readFileSync(
'/etc/letsencrypt/live/dongmul.shop/privkey.pem',
'utf8'
),
cert: fs.readFileSync(
'/etc/letsencrypt/live/dongmul.shop/cert.pem',
'utf8'
),
ca: fs.readFileSync('/etc/letsencrypt/live/dongmul.shop/chain.pem', 'utf8')
};
@WebSocketGateway(3001, {
namespace: '/chatting',
secure: true,
rejectUnauthorized: true,
httpsOptions
})
export class ChatGateway { ... }
Комментарии:
1. Я решил эту проблему. Я только что удалил номер порта шлюза WebSocket. После этого вы можете использовать порт 3000 с api.