据我所知,Node.js服务器基本上是一个JavaScript文件,由node可执行文件运行.是否可以在不停止请求处理的情况下更新此文件?
我想必须为此停止节点可执行文件,所以我想我应该使用反向代理.例如:
这是一种有效的方法吗?如何在多台服务器计算机上自动完成此类版本更新(可从同一LAN访问)?
我们想知道是否有人在Varnish有大量禁令的经验.我们考虑一种禁令策略,每晚可能导致几百次(智能)禁令(在X百万个缓存对象上).
虽然我知道这很大程度上依赖于环境变量,但我们想知道这是否会对性能产生重大影响.
我试图限制端口9200上对elasticsearch的直接访问,但允许Nginx代理传递给它.
这是我目前的配置:
server {
listen 80;
return 301;
}
server {
listen *:5001;
location / {
auth_basic "Restricted";
auth_basic_user_file /var/data/nginx-elastic/.htpasswd;
proxy_pass http://127.0.0.1:9200;
proxy_read_timeout 90;
}
}
Run Code Online (Sandbox Code Playgroud)
这几乎与我想要的一样.我可以在端口5001上访问我的服务器以访问elasticsearch,并且必须按预期输入凭据.
但是,我仍然可以点击:9200并避免HTTP身份验证,这会失败.如何在不限制nginx的情况下阻止访问此端口?我试过这个:
server {
listen *:9200;
return 404;
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
nginx: [emerg] bind() to 0.0.0.0:9200 failed (98: Address already in use)
Run Code Online (Sandbox Code Playgroud)
因为它与elasticsearch冲突.
必须有办法做到这一点!但我想不出来.
编辑:
我根据评论编辑并总结了问题:
我想锁定<serverip>:9200,基本上只允许通过端口5001(在HTTP Auth后面)进行访问.5001应代理到127.0.0.1:9200,以便只能通过5001访问elasticsearch.所有其他访问应该是404(或301等).
我试图使用fiddler来模拟连接丢弃,除了增加延迟以减慢请求很长一段时间.
谢谢,
希德
我正在尝试设置一个Ubuntu Docker容器,它在端口9000上运行Node.js HTTP应用程序.为了模仿生产环境的设置,我还希望将Apache作为一个简单的反向代理服务器运行在容器中,转发给它来自端口80的应用程序(我向大坏世界揭露).
我已经能够很好地设置Node.js应用程序容器了,我可以在我的内部安装和设置Apache Dockerfile; 但我对设置反向代理完全不熟悉,所以当Apache确实启动时,它不会代理.
我Dockerfile看起来像:
# DOCKER-VERSION 1.3.0
FROM ubuntu:12.04
# Install and set up Apache as a reverse proxy
RUN apt-get -y install apache2 libapache2-mod-proxy-html
COPY apache2.conf /etc/apache2/app.conf
RUN cat /etc/apache2/app.conf >> /etc/apache2/apache2.conf
RUN service apache2 start
# Install and set up Node.js and bundle app
# ...This works...
EXPOSE 80
CMD ["./start-app.sh"]
Run Code Online (Sandbox Code Playgroud)
...... apache2.conf我追加的/etc/apache2/apache2.conf是:
ServerName localhost
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
<Proxy *> …Run Code Online (Sandbox Code Playgroud) 在控制器中,我一直在使用方法getSchemeAndHttpHost来构建另一个控制器的url.
一切都运行顺利,直到我需要通过https.我使用getSchemeAndHttpHost函数获得的所有URL仍然是http.做了一些故障排除,结果是当我用https和http请求页面时,getScheme函数总是返回http.
我错过了什么 ?
我怎么知道我的控制器是通过http还是https?
编辑 - 更多信息
我有一个nodejs博客应用程序.我也使用nginx反向代理服务它.问题是我无法使用该应用程序加载静态文件.我在以下文件中看到了我配置的ngix.但由于某种原因,当我重定向到mysite.com/blog我无法加载静态文件,但在mysite:port/blog我可以.
这是nginx.config文件:
server {
listen *:80;
server_name www.georgegkas.discrete.gr georgegkas.discrete.gr;
root /var/www/georgegkas.discrete.gr/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ^~ /web-class.gr/ {
try_files $uri $uri/ =404;
if (!-e $request_filename){
rewrite ^(.*)$ /index.html break;
}
}
location /blog {
root /var/www/georgegkas.discrete.gr/html/GeorgeGks-Blog/app/public;
try_files $uri $uri/ @nodejs_blog;
expires max;
access_log off;
}
location @nodejs_blog {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8081;
}
}
Run Code Online (Sandbox Code Playgroud)
我的app.js文件:
/********************** APP DEPENDENCES AND CONFIGURES ************************/
// Include required …Run Code Online (Sandbox Code Playgroud) I am new to NGINX and need some clarification. I am deploying NGINX as reverse proxy for my web application which will also work as an API gateway. This API gateway will first send all the HTTP requests to an authentication service (radius based authentication) and then will forward the authenticated requests to the upstream server. Following are my questions for such a scenario.
How does the upstream server knows that the request it received is an authenticated request ? …
我正在使用tinyproxy来反向代理。我有三个指向同一服务器的子域,我们需要它们在内部指向特定的端口。即,来自任何特定子域的端口80映射到特定端口。请参阅下面的配置示例。
配置看起来像这样:
Port 80
#Allow 127.0.0.1
#ReverseOnly yes
upstream 127.0.0.1:8115 "website.example.com"
upstream 127.0.0.1:3000 "api.example.com"
upstream 127.0.0.1:9000 "socket.example.com"
Run Code Online (Sandbox Code Playgroud)
当我拉起任何子域时,我得到的是:
拒绝访问
此代理的管理员尚未将其配置为服务来自主机的请求。
由tinyproxy版本1.8.3生成。
我在任何地方都找不到足够的文档。我正在考虑与维护者联系。请帮忙。
问题
我正在通过Apache2反向代理运行节点服务器(sqlpad).
在某些请求中,节点服务器返回304状态代码,Content-Type直接访问时为no .但是,当通过反向代理访问时,状态代码将更改为200,并Content-Type添加值为text/html.添加它Content-Type会导致应用程序无法加载JS和CSS,因为X-Content-Type-Options: nosniff它位于标题中.
我真的不想对节点服务器进行更改,因为它不是我的项目.我想用反向代理配置解决这个问题.
如何配置Apache2 ProxyPass以转发原始304响应,或者至少,不用Content-Type缺省填写缺失?
以下是我的具体内容:
组态
# /etc/apache2/sites-enabled/xxxx.conf
...
<Location "/sqlpad">
ProxyPass http://x.x.x.x:xxxx # IP address of Node server
ProxyPassReverse http://x.x.x.x:xxxx # IP address of Node server
</Location>
# /etc/apache2/apache2.conf (comments removed)
ServerName xxxxx.com
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 600
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include …Run Code Online (Sandbox Code Playgroud)