最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

为什么我在此URL https:davedevzone.comchat上收到404错误,而不是直接从端口https:davedevzone.com:3001收到错误

IT培训 admin 5浏览 0评论

为什么我在此URL https://davedevzone.com/chat/上收到404错误,而不是直接从端口https://davedevzone.com:3001收到错误

嗨,我在设置nodejs应用程序的路径时遇到问题,但我不确定它是否与我配置nginx的方式或我设置应用程序的方式有关。

基本上我想服务以下::3001/

作为一个很好的格式化网址没有端口,像这样:qazxsw poi

但是,当我尝试转到最后一个URL时,您可以看到它在尝试加载的每个资源上都崩溃了404错误(css文件和js文件)

我注意到,如果我用包含端口的完整URL替换每个资源标记的本地路径,它就可以解决问题。例如:

/

加载很好。但我不确定这是否是正确的方法,或者它是否会在未来给我带来任何复杂情况。对我而言,这感觉就像是简单的出路,而这在我的经历中通常永远不会好。

这是我的应用程序的完整代码:

index.js(服务器端)

:3001/css/site.css

index.html(客户端)

var port = 3001; // app's port
var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
//var http = require('http').Server(app);
var server = https.createServer({
    key: fs.readFileSync('privkey.pem'),
    cert: fs.readFileSync('fullchain.pem')
},app);

var io = require('socket.io')(server);


app.use('/css', express.static('css'));
app.use('/js', express.static('js'));

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
    socket.on('chat message', function(msg){
        console.log('message: ' + msg);
        socket.broadcast.emit('chat message', msg);
    });
});


server.listen(port, function(){
    console.log('listening on *:' + port);
});

来自/etc/nginx/sites-available/davedevzone的我的nginx配置文件

<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <link rel="stylesheet" type="text/css" href="/css/site.css" />
  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/js/jquery-1.11.1.js"></script>
    <script>
        var socket = io();

        $('form').submit(function(e){
            e.preventDefault();
            var msg = $('#m').val();
            socket.emit('chat message', msg);
            $('#messages').append($('<li>').text(msg));
            $('#m').val('');
            return false;
        });

        socket.on('chat message', function(msg){
            $('#messages').append($('<li>').text(msg));
        });

        console.log("from nodeprojects folder");
    </script>
  </body>
</html>
回答如下:

更改

server {
    listen 80;

    index index.html index.html index.nginx-debian.html;

    server_name davedevzone www.davedevzone;

    location /sample/ {
        proxy_pass http://127.0.0.1:3000/;
    }

    location /chat/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass https://127.0.0.1:3001/;
        proxy_redirect off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    } 


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/davedevzone/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/davedevzone/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}

<link rel="stylesheet" type="text/css" href="/css/site.css" />

并为<link rel="stylesheet" type="text/css" href="/chat/css/site.css" /> /socket.io/socket.io.js做同样的事情。然后它从聊天URL请求它们,该聊天URL反向代理到端口3001。

为什么我在此URL https://davedevzone.com/chat/上收到404错误,而不是直接从端口https://davedevzone.com:3001收到错误

嗨,我在设置nodejs应用程序的路径时遇到问题,但我不确定它是否与我配置nginx的方式或我设置应用程序的方式有关。

基本上我想服务以下::3001/

作为一个很好的格式化网址没有端口,像这样:qazxsw poi

但是,当我尝试转到最后一个URL时,您可以看到它在尝试加载的每个资源上都崩溃了404错误(css文件和js文件)

我注意到,如果我用包含端口的完整URL替换每个资源标记的本地路径,它就可以解决问题。例如:

/

加载很好。但我不确定这是否是正确的方法,或者它是否会在未来给我带来任何复杂情况。对我而言,这感觉就像是简单的出路,而这在我的经历中通常永远不会好。

这是我的应用程序的完整代码:

index.js(服务器端)

:3001/css/site.css

index.html(客户端)

var port = 3001; // app's port
var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
//var http = require('http').Server(app);
var server = https.createServer({
    key: fs.readFileSync('privkey.pem'),
    cert: fs.readFileSync('fullchain.pem')
},app);

var io = require('socket.io')(server);


app.use('/css', express.static('css'));
app.use('/js', express.static('js'));

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
    socket.on('chat message', function(msg){
        console.log('message: ' + msg);
        socket.broadcast.emit('chat message', msg);
    });
});


server.listen(port, function(){
    console.log('listening on *:' + port);
});

来自/etc/nginx/sites-available/davedevzone的我的nginx配置文件

<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <link rel="stylesheet" type="text/css" href="/css/site.css" />
  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/js/jquery-1.11.1.js"></script>
    <script>
        var socket = io();

        $('form').submit(function(e){
            e.preventDefault();
            var msg = $('#m').val();
            socket.emit('chat message', msg);
            $('#messages').append($('<li>').text(msg));
            $('#m').val('');
            return false;
        });

        socket.on('chat message', function(msg){
            $('#messages').append($('<li>').text(msg));
        });

        console.log("from nodeprojects folder");
    </script>
  </body>
</html>
回答如下:

更改

server {
    listen 80;

    index index.html index.html index.nginx-debian.html;

    server_name davedevzone www.davedevzone;

    location /sample/ {
        proxy_pass http://127.0.0.1:3000/;
    }

    location /chat/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass https://127.0.0.1:3001/;
        proxy_redirect off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    } 


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/davedevzone/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/davedevzone/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}

<link rel="stylesheet" type="text/css" href="/css/site.css" />

并为<link rel="stylesheet" type="text/css" href="/chat/css/site.css" /> /socket.io/socket.io.js做同样的事情。然后它从聊天URL请求它们,该聊天URL反向代理到端口3001。

发布评论

评论列表 (0)

  1. 暂无评论