为什么我在此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。