使用 NGINX 在端口 80 上为使用虚拟主机托管在 Amazon EC2 上的域的 node.js 应用程序提供 HTTP 流量
Using NGINX to serve HTTP traffic on port 80 for node.js app for domain hosted on Amazon EC2 with virtual host
我在 Amazon EC2 运行ning bitnami wordpress 上托管了 2 个域,使用的是 apache virualhost
wordpres.com > '/apps/wordpress'
website.com > '/apps/website'
我创建了一个托管在“/apps/website/graph”
中的 node.js 图形应用程序
我希望在 网站上访问此应用程序。com/graph
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: true }));
app.set('view engine', 'ejs');
app.get('/graph', function (req, res) {
res.render('index');
});
app.post('/graph', function (req, res) {
console.log(req.body.speed + " " + req.body.freq);
res.render('index');
})
var port = 3000;
app.listen(port, function () {
console.log('Server Running on port ' + port)
});
服务器 运行 在 website.com:3000/graph 和 wordpress.com:3000/graph
上运行良好
问题 1: 如何让它在 website.com:3000/graph 上 仅 工作?
问题的第二部分是如何使用 nginx 将端口 80 上的 HTTP 流量提供给网站上的 运行。com/graph?
我在“/sites-available”中创建了这个 'graph' nginx 文件并在“/sites-enabled”中链接:
server {
listen 80;
server_name website.com;
location /graph{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000/graph;
}
}
然后我重启了nginx,但是我去网站的时候没有用。com/graph。
问题 2:如何使此 HTTP 流量仅在网站上有效。com/graph?
我在这里做错了什么或遗漏了什么?我是一名前端设计师,我对服务器端没有什么经验,所以请原谅我的无知:)
作为参考,我正在关注这个 tutorial。
提前致谢。
nginx.conf
bitnami@ip-172-..-.-..:/etc$ cat nginx/nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml appli cation/xml application/xml+rss text/javascript;
##
# nginx-naxsi config
##
# Uncomment it if you installed nginx-naxsi
##
#include /etc/nginx/naxsi_core.rules;
##
# nginx-passenger config
##
# Uncomment it if you installed nginx-passenger
##
#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
@PulledBull 和我在聊天中一起解决了这个问题。他们有以下 Apache 配置:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
</VirtualHost>
<VirtualHost *:80>
ServerName other.domain
ServerAlias www.other.domain
DocumentRoot "/opt/bitnami/apps/is/htdocs"
ErrorLog "logs/otherdomain-error_log"
CustomLog "logs/otherdomain-access_log" common
</VirtualHost>
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
</VirtualHost>
我们通过编辑现有配置而不是使用 NGINX 解决了这个问题。我们将以下行添加到我们希望 Node.js 应用程序可用的每个虚拟主机:
ProxyPass /traingraph 127.0.0.1:3000
我们只希望 /traingraph 可以在 other.domain
上访问,所以我们最终得到了以下配置:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
</VirtualHost>
<VirtualHost *:80>
ServerName other.domain
ServerAlias www.other.domain
DocumentRoot "/opt/bitnami/apps/is/htdocs"
ErrorLog "logs/otherdomain-error_log"
CustomLog "logs/otherdomain-access_log" common
ProxyPass /traingraph 127.0.0.1:3000
</VirtualHost>
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
</VirtualHost>
我在 Amazon EC2 运行ning bitnami wordpress 上托管了 2 个域,使用的是 apache virualhost
wordpres.com > '/apps/wordpress'
website.com > '/apps/website'
我创建了一个托管在“/apps/website/graph”
中的 node.js 图形应用程序我希望在 网站上访问此应用程序。com/graph
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: true }));
app.set('view engine', 'ejs');
app.get('/graph', function (req, res) {
res.render('index');
});
app.post('/graph', function (req, res) {
console.log(req.body.speed + " " + req.body.freq);
res.render('index');
})
var port = 3000;
app.listen(port, function () {
console.log('Server Running on port ' + port)
});
服务器 运行 在 website.com:3000/graph 和 wordpress.com:3000/graph
上运行良好问题 1: 如何让它在 website.com:3000/graph 上 仅 工作?
问题的第二部分是如何使用 nginx 将端口 80 上的 HTTP 流量提供给网站上的 运行。com/graph?
我在“/sites-available”中创建了这个 'graph' nginx 文件并在“/sites-enabled”中链接:
server {
listen 80;
server_name website.com;
location /graph{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000/graph;
}
}
然后我重启了nginx,但是我去网站的时候没有用。com/graph。
问题 2:如何使此 HTTP 流量仅在网站上有效。com/graph?
我在这里做错了什么或遗漏了什么?我是一名前端设计师,我对服务器端没有什么经验,所以请原谅我的无知:)
作为参考,我正在关注这个 tutorial。
提前致谢。
nginx.conf
bitnami@ip-172-..-.-..:/etc$ cat nginx/nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml appli cation/xml application/xml+rss text/javascript;
##
# nginx-naxsi config
##
# Uncomment it if you installed nginx-naxsi
##
#include /etc/nginx/naxsi_core.rules;
##
# nginx-passenger config
##
# Uncomment it if you installed nginx-passenger
##
#passenger_root /usr;
#passenger_ruby /usr/bin/ruby;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
@PulledBull 和我在聊天中一起解决了这个问题。他们有以下 Apache 配置:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
</VirtualHost>
<VirtualHost *:80>
ServerName other.domain
ServerAlias www.other.domain
DocumentRoot "/opt/bitnami/apps/is/htdocs"
ErrorLog "logs/otherdomain-error_log"
CustomLog "logs/otherdomain-access_log" common
</VirtualHost>
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
</VirtualHost>
我们通过编辑现有配置而不是使用 NGINX 解决了这个问题。我们将以下行添加到我们希望 Node.js 应用程序可用的每个虚拟主机:
ProxyPass /traingraph 127.0.0.1:3000
我们只希望 /traingraph 可以在 other.domain
上访问,所以我们最终得到了以下配置:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"
</VirtualHost>
<VirtualHost *:80>
ServerName other.domain
ServerAlias www.other.domain
DocumentRoot "/opt/bitnami/apps/is/htdocs"
ErrorLog "logs/otherdomain-error_log"
CustomLog "logs/otherdomain-access_log" common
ProxyPass /traingraph 127.0.0.1:3000
</VirtualHost>
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
</VirtualHost>