簡體   English   中英

如何在一個域中配置Apache服務器和節點服務器?

[英]How to configure Apache server and node server in one domain?

我學習有困難。

我正在制作自己的 sns 應用程序,例如 Facebook 或 Instagram。 所以我完成了時間線功能,所以這次我要創建一個聊天。 所以我想用node.js + socket.io做一個聊天功能。 這就是為什么我想知道如何構建 node.js 服務器。

我的開發環境是 Ubuntu 18.04 + apache2 + Mysql (+ Let's Encrypt SSL And I have a domain)

即使我在谷歌上搜索並查找,我也無法創建 https node.js 服務器。

有人不能輕松詳細地幫助我嗎?

android 來自 Api 29 默認推薦使用 https 通信。 您可以在 api 29 上與 http 通信,但這不是一個長期的解決方案。 這就是我使用 https 配置我的服務器的原因。 我永遠不會把它改成http。

假設域名為 test.com。

以下是我的 000-default.conf 文件中的設置。

vi /etc/apache2/sites-availabls/000-default.conf

<VirtualHost *:80>
    ServerName test.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    Redirect / https://test.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName  test.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/test.com/privkey.pem
    SSLCertificateFile /etc/letsencrypt/live/test.com/cert.pem
    SSLCACertificateFile /etc/letsencrypt/live/test.com/fullchain.pem

<Directory />
    AllowOverride All
    Options All -Indexes
    Require all granted
</Directory>
</VirtualHost>

端口 80 稱為 http 通信。 所以我重定向到https uri。

所以我基本知道443端口是https通信的端口。 無論如何,重要的是我的Apache服務器使用的是80端口和443端口。這里我們要創建一個可以用https通信聊天的node.js socket服務器。 如果您能輕松而詳細地幫助我,那將非常有幫助。

服務器的根路徑 -> /var/www/html/

在android中使用的php文件夾路徑-> /var/www/html/android

要在 android 上使用的用戶個人資料圖片文件夾路徑 -> /var/www/html/android/image

我想在以下路徑中創建一個 node.js 文件。

用於在 android 上聊天的文件夾。 -> /var/www/html/android/chat

我在谷歌上搜索,但都失敗了。 否則,我看到的所有示例都只運行了一個 node.js 服務器。

我嘗試了 proxypass 或 proxypassreverse 或Something but Failed。

嘗試在服務器計算機上的任何空閑端口上運行服務器

var https = require('https');
https.createServer(options, app).listen(ANY_PORT);

並在您的 android 代碼中指定要連接的端口

val url = URL("https://test.com:ANY_PORT")

這對我行得通。

您可以做的一件事是使用 apache 進行反向代理。 請參閱文檔: https : //httpd.apache.org/docs/2.4/howto/reverse_proxy.html

這真正意味着說你的 php 東西在端口 80 和 443 上運行。 但是,現在你有一個節點服務在端口 3000 上運行。

但是,您想將端口 3000 屏蔽為端口 80。所以您可以說您有 domain.com/chat 運行您的端口。 因此,您可以偵聽到達該路徑的任何路由,並將它們轉發到運行該服務的應用程序。

按照說明從 certbot.eff.org 安裝 Letsencrypt 並使用此命令。 安裝時選擇No Redirect選項。

sudo certbot --apache

使用以下命令從您的證書文件夾中復制privkey.pemfullchain.pem

sudo cp /etc/letsencrypt/live/test.com/privkey.pem ~/nodejs-rootfolder
sudo cp /etc/letsencrypt/live/test.com/fullchain.pem ~/nodejs-rootfolder

nodejs-rootfolder是您保存Node.js服務器項目的地方

index.jsserver.js文件中提及以下代碼。

var express = require('express');
var http = require('http');
var https = require('https');
var app = express();

app.use(cors())
app.use(bodyParser.json({ limit: '500mb' }))
app.use(bodyParser.urlencoded({ extended: true }))
var fs = require('fs');

var privateKey = fs.readFileSync('privkey.pem');
var certificate = fs.readFileSync('fullchain.pem');

var credentials = { key: privateKey, cert: certificate };
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
app.all('*', function (req, res, next) {
   res.set('Access-Control-Allow-Origin', req.header('origin') || req.header('x- forwarded-host') || req.header('referer') $
   res.set('Access-Control-Allow-Credentials', true);
   res.set('Access-Control-Allow-Methods', 'POST,GET,PUT,DELETE');
   res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Authorization,Access-control-request-headers,i$
   if ('OPTIONS' == req.method) return res.send(200);
   next();
});
var port = process.env.PORT || 5001;
httpsServer.listen(port, () => console.log(`Listening on port ${port}`));

certbot --apache將完成 SSL 配置的所有安裝和設置。 使用上面列出的解決方法,您可以完成它。 但是,如果您希望您的服務器將所有HTTP重定向到HTTPS使用以下配置。

sudo nano /etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
    ServerName test.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =test.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>

然后執行sudo service apache2 restart

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM