我在我的服务器上设置了Node.js和Nginx.现在我想使用它,但是,在我开始之前有2个问题:
Node.js服务器有2个概念,其中一个更好:
一个.为需要它的每个网站创建单独的HTTP服务器.然后在程序开始时加载所有JavaScript代码,因此代码被解释一次.
湾 创建一个处理所有Node.js请求的Node.js服务器.这将读取所请求的文件并篡改其内容.因此,每个请求都会解释文件,但服务器逻辑要简单得多.
我不清楚如何正确使用Node.js.
是否有更快的基准或比较:将nginx放在节点前面并让它直接提供静态文件或仅使用节点并使用它来提供静态文件?
nginx解决方案对我来说似乎更容易管理,有什么想法吗?
我正在构建一个Node.js应用程序,我正在使用nginx作为反向代理.我的应用程序有一些我需要提供的静态文件和一个Socket.io服务器.
我知道我可以使用Express直接提供静态文件(使用express.static中间件).此外,我可以将nginx直接指向我的静态文件所在的目录,因此它们将由nginx提供.
那么,问题是:哪一个更好的方法?使用每种方法时我可以面对哪些优点和缺点?
我试图遵循弹性beanstalk上的nginx配置,有些东西不加起来.
该实例在安全组中打开端口80,因此我假设所有传入流量都来自该端口
cat /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf中的nginx配置指出:
server {
listen 8080;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
gzip on;
}
Run Code Online (Sandbox Code Playgroud)
8080港口?那个是从哪里来的?我试图弄乱它,这是正在运行的实际指令.
server_name丢失了,但是你输入的内容并不重要.如果我自己在server_name中放置任何值,则此服务器规则仍将匹配所有请求,即使是那些远程不能重置server_name值的请求.
连接到实例本身时,似乎两个端口都在服务:
[ec2-user @ ip-172-31-45-222~] $ sudo netstat -lnptu
tcp 0 0 0.0.0.0:8080 0.0.0.0:*LISTEN 22506/nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:*LISTEN 22506/nginx
再一次,8080永远不会在安全组中打开,因此弹性负载平衡通过端口80进入内部.流量是否神奇地从80升到8080?有什么想法在这里发生了什么?
我是第一次在Node中创建一个HTTPS服务器,代码(见下文)适用于像6643这样的随机端口,但是在端口443上,它不起作用.我收到此错误:
[Debug][Server]: Initialized...
[Debug][Control Center]: Application initialized...
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EACCES
at errnoException (net.js:904:11)
at Server._listen2 (net.js:1023:19)
at listen (net.js:1064:10)
at Server.listen (net.js:1138:5)
at Object.module.exports.router (/home/ec2-user/Officeball/Versions/officeball_v0.0.5/server/custom_modules/server.js:52:5)
at Object.<anonymous> (/home/ec2-user/Officeball/Versions/officeball_v0.0.5/server/control_center.js:15:59)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
Run Code Online (Sandbox Code Playgroud)
这是在Amazon Linux EC2服务器上.我的理解是,一旦我将域名的DNS A名称记录设置为服务器的IP,当用户搜索https://mydomain.com时,浏览器将在端口443查找我的服务器IP,这应该是HTTPS的标准端口交通.
所以我的理解是我需要通过端口443提供https内容.
我究竟做错了什么?
这是我的服务器代码:
control_center.js(init)
/* Control Center */
//DEFINE GLOBALS
preloaded = {};
//GET DIRECT WORKING PATH
var dirPath = process.cwd();
//REQUIRE CUSTOM MODULES
var debug …Run Code Online (Sandbox Code Playgroud) nginx和Node.js都有事件循环来处理请求.我把nginx放在Node.js前面,就像这里推荐的那样
仅使用Node.js与使用Apache/Nginx的Node.js
使用此处显示的设置
两个事件循环如何一起玩?两者之间是否存在冲突风险?我想知道因为Nginx可能无法每秒处理与Node.js一样多的事件,反之亦然.例如,如果Nginx每秒可以处理1000个事件但node.js只能处理500个,那么这不会导致问题吗?(我不知道1000,500是否是合理的数量级,你可以纠正我.)
把Apache放在Node.js面前怎么样?Apache没有事件循环.只是线程.所以不会把Apache放在Node.js前面打败目的吗?
在2010年的演讲中,Node.js的创建者Ryan Dahl有望完全摆脱nginx/apache /,让节点直接与互联网对话.你觉得什么时候会成为现实?
nginx ×5
node.js ×5
amazon-ec2 ×1
apache ×1
concept ×1
express ×1
https ×1
javascript ×1
ssl ×1
static-files ×1