我有一个特殊的URI方案,这给我带来了麻烦。我需要运行nodejs来提供以下服务:
domain.com
var.domain.com
var.domain.com/foo/
我有这项工作没有问题,可以express.vhost()
用来提供子域。但是,一旦URI类似于以下内容,我就需要提供静态内容和php:
var.domain.com/foo/bar
var.domain.com/foo/bar/index.php
这/bar/
是我服务器上的某个目录。从该url下来的所有内容(例如/bar/images/favicon.ico
)都将像您的典型目录方案一样工作。通常,我会将典型的proxy_pass传递给在某个端口上运行的节点,但是正如您在此处看到的那样,我需要nodejs成为端口80上的主要处理程序,并将请求传递给在其他端口上运行的nginx(或者是否可以/更简单地解决?)。
(nginx / php)/ nodejs配置是否可以使用这种方案?
Nginx允许非常灵活的请求路由。我会告诉你一种设置方法
我喜欢,并且我认为这是大多数发行版的默认安装布局,conf.d
并vhosts.d
带有active
和available
文件夹。因此,我只需删除符号链接即可轻松禁用虚拟主机或配置文件。
/etc
nginx.conf
vhosts.d/
active
available
conf.d/
active
available
/etc/nginx.conf
# should be 1 per CPU core
worker_processes 2;
error_log /var/log/nginx/error.log;
# I have this off because in our case traffic is not monitored with nginx and I don't want disks to be flooded with google bot requests :)
access_log off;
pid /var/run/nginx.pid;
events {
# max clients = worker_processes * worker_connections
worker_connections 1024;
# depends on your architecture, see http://wiki.nginx.org/EventsModule#use
use epoll;
}
http {
client_max_body_size 15m;
include mime.types;
default_type text/html;
sendfile on;
keepalive_timeout 15;
# enable gzip compression
gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/x-javascript application/atom+xml application/rss+xml application/json;
gzip_http_version 1.0;
# Include conf.d files
include conf.d/active/*.conf;
# include vhost.d files
include vhosts.d/active/*.conf;
}
/etc/nginx/vhosts.d/available/default.conf
说我们静态文件的文档根是 /srv/www/vhosts/static/htdocs
server {
server_name _;
listen 80;
root /srv/www/vhosts/static/htdocs;
# if a file does not exist in the specified root and nothing else is definded, we want to serve the request via node.js
try_files $uri @nodejs;
# may want to specify some additional configuration for static files
location ~ \.(js|css|png|gif|jpg)
{
expires 30d;
}
location @nodejs
{
# say node.js is listening on port 1234, same host
proxy_pass 127.0.0.1:1234;
break;
}
# just for fun or because this is another application, we serve a subdirectory via apache on another server, also on the other server it's not /phpmyadmin but /tools/phpMyAdmin
location /phpmyadmin {
rewrite /phpmyadmin(.*)$ /tools/phpMyAdmin$1;
proxy_pass 10.0.1.21:80;
break;
}
# files with .php extension should be passed to the php-fpm backend, socket connection because it's on the same and we can save up the whole tcp overhead
location ~\.php$
{
fastcgi_pass unix:/var/run/php-fpm.sock;
include /etc/nginx/fastcgi_params;
break;
}
}
创建一个符号链接以激活默认虚拟主机
ln -s /etc/nginx/vhosts.d/available/default.conf /etc/nginx/vhosts.d/active/.
/etc/init.d/nginx restart
看看nginx配置语言多么简单直观?我只是喜欢它:)
我正在尝试使用Node.js来读取凤凰频道使用npm包凤凰频道。凤凰频道是在websockets之上复用的。我在我的phoenix服务器前面使用的是NGINX代理,所以对于NGINX来说,它只是一个websocket。 凤凰频道在网页上运行良好,正如您在此处看到的(您将在网页中看到数据)。 它也可以从我的内部网络上的nodejs正常工作: 但是,如果我用域名替换显式IP: PORT地址,并从外部运
问题内容: 我已经在服务器上设置了Node.js和Nginx。现在,我想使用它,但是在开始之前,有两个问题: 他们应该如何一起工作?我应该如何处理请求? Node.js服务器有两个概念,其中一个更好: 一个。为每个需要它的网站创建一个单独的HTTP服务器。然后在程序开始时加载所有JavaScript代码,因此该代码将被解释一次。 b。创建一个处理所有Node.js请求的单个Node.js服务器。这
问题内容: 在哪种情况下,应该只在实际部署中将Node.js用作服务器? 当一个人 不 希望只使用Node.js的,有什么用Node.js的发挥更好?Apache还是Nginx? 问题答案: 将另一个Web服务器放在Node.js前面有几个充分的理由: 不必担心Node.js进程的特权/ setuid。通常只有root可以绑定到端口80。如果让nginx / Apache担心以root身份启动,绑
问题内容: 我有一个在nginx代理后面运行的node.js服务器。node.js在端口3000上运行HTTP 1.1(无SSL)服务器。两者均在同一服务器上运行。 我最近将nginx设置为将HTTP2与SSL(h2)结合使用。似乎HTTP2确实已启用并且正在工作。 但是,我想知道代理连接(nginx <-> node.js)正在使用HTTP 1.1的事实是否会影响性能。也就是说,因为我的内部连接
出于实验/学习目的(假设我的应用程序有很多持久/并发流量),我有一个运行docker的虚拟机。对于docker,我有以下设置: 所有东西都有自己的容器,并与端口通信。我试图模拟两个不同的服务器(Nginx),通过HAProxy实现负载平衡。 现在它工作得很好,但是据我所知,节点仍然只在单线程中运行。 Nginx包含的唯一配置是作为节点的反向代理(其他所有配置都是默认配置)。每个Nginx服务器只处
null 我倾向于认为它是第一个,但在这种情况下,nginx不会是应用程序的入口...(这是个问题吗?)