我在网站基础架构devise方面没有经验。 我知道这可能是具体情况。 该网站应该: 1)需要某些页面(例如login页面)的HTTPS支持,而其他页面只是HTTP页面。 2)需要多个Web服务器,以便需要一些负载平衡。 3)需要HTTPcaching和压缩来提升性能。 4)一些请求(例如图像上传)应该被路由到专用的后端服务器。 所以,基于URL的平衡是必需的。 我知道Nginx和HAProxy都是很好的开源反向代理和/或负载平衡器。 由于HAProxy不支持SSL,而Nginx负载平衡不如HAProxy。 我将采取两个。 那么,我应该把Nginx(作为反向代理)放在HAProxy(作为负载平衡器)的前面,还是相反? 谢谢
我试图返回nginx中的非HTTPS请求的自定义400错误页面。 我是nginx的新手,但是我已经阅读了很多页面的自定义错误页面的例子,似乎没有任何工作。 我的configuration: server { listen 80; error_page 400 /400.html; location = /400.html { root /var/www/html; } return 400; } 返回工作,因为如果我改变代码(例如到401或500),我得到适当的默认nginx错误页面。 我知道该文件存在,因为如果我拿出返回它将直接服务我的400.html页面没有问题。 但是我没有试过,导致我的自定义页面显示出来,当我返回错误代码。 我错过了什么? 更新:其他变种我试图无果: server { listen 80; error_page 400 /400.html; location = /400.html { root /var/www/html; } return 400; } server { listen 80; root /var/www/html; error_page 400 /400.html; location = /400.html { […]
我有两台服务器(A和B)与NGINX。 服务器A正在服务旧网站,而服务器B正在服务新网站。 我已经更新了DNS,但是速度很慢:在我的办公室里,我仍然看到我的旧网站: subdomain.site.com 我怎样才能redirect从服务器A的这个特定的子域到服务器B的所有请求? 现在,他们都在NGINX中处理这个问题: server { listen 80; server_name subdomain.site.ru; root /var/www/subdomain/public; passenger_enabled on; }
我想要的url http://www.example.com redirect到 http://www.example.com/something/else 这是因为一些不可思议的WP插件总是在基础url上设置一个cookie,这不允许我caching它。 我试过这个指令: location / { rewrite ^ /something/else break; } 但1)没有redirect和2)页面开始向我的服务器发送超过1000个请求。 有了这个: location / { rewrite ^ http://www.example.com/something/else break; } Chrome报告一个redirect循环。 什么是正确的正则expression式使用?
我正试图将一个非常简单的从以前的nginx版本改写成如下所示的当前版本: location / { if ( !-f $request_filename ) { rewrite ^/([az]*)$ /index.php?action=$1; rewrite ^/([az]*)/(.*)$ /index.php?action=$1&item=$2; } } 这是我得到了多less。 索引页面显示出来,但是任何应该像上面那样重写的页面,会抛出404错误: server { listen 80 default; root /var/www; index index.php; server_name _; location / { try_files $uri $uri/ /index.php?action=$uri&item=$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } } 我在这里做错了什么?
我试图使用nginx代理传递给两个docker集装箱。 这是我的上游configuration文件: upstream api_servers { server http://192.168.49.4:49155; server http://192.168.49.4:49156; } 这是我试图加载它: nginx: [emerg] invalid host in upstream "http://192.168.49.4:49155" in /etc/nginx/conf.d/api_upstream.conf:3 nginx: configuration file /etc/nginx/nginx.conf test failed 一旦我删除了http://前缀错误停止发生。 这是为什么?
我的环境具有通过多个系统的用户请求: [客户端] – > [ELB] —> [nginx] – > [网页] (ELB = AWS Elastic Load Balancer) 感谢这个答案 ,我有nginx确定并通过X-Forwarded-For和X-Real_IP头将正确的客户端IP地址传递给上游服务器(web)。 相关的nginxconfiguration: real_ip_header X-Forwarded-For; set_real_ip_from 10.0.0.0/8; real_ip_recursive on; proxy_set_header X-Real-IP $remote_addr; 我的问题是,nginx中的真实IP模块用其X-Forwarded-For计算结果replace现有的$remote_addrvariables。 这给了我最初的客户端IP,但是我正在丢失实际发送请求到代理(即ELB)的系统的IP地址。 总的来说,拥有客户端IP对我来说更为重要,但是我希望能够logging完整的请求链,以便我能够理解(并debugging)stream量是如何stream动的。 目前,我只能有nginxlogin客户端IP,自己的IP,以及上游服务器IP。 我希望能够loginELB IP。 我看到X-Istence在2013年问了同样的问题 ,运气不多。 从那以后有什么改变或改进?
Nginx允许您将文件扩展名映射到MIMEtypes。 正如文档所说 ,它甚至带有一个预先build立的MIMEtypes列表(在问题的最后粘贴)。 我一直信任这个列表,事情很好,但现在我注意到有些types丢失了。 那么application/javascript和application/json呢? 它使用旧的弃用的application/x-javascript ,我想这是为了确保IE支持…但它真的好吗? 另外,什么types应该被压缩? 我一直使用下面的代码片段中的列表,虽然我承认它只是nginxconfiguration文件的一部分,我几年前作为一个例子,当我第一次开始使用nginx的时候。 我应该还包括application/json ? http { include mime.types; default_type application/octet-stream; gzip_types text/plain text/xml text/css text/comma-separated-values text/javascript application/x-javascript application/atom+xml; # text/html is included in the gzip list by default # … } /etc/nginx/mime.types的默认MIMEtypes。 types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg; application/x-javascript […]
Docker的文档中有一篇关于Docker安全性的好文章: https : //docs.docker.com/articles/security/ 但是,我并不清楚容器中的根特权进程是如何在主机系统中运行的,以及我应该如何configurationSELinux来处理进程在容器外“泄漏”的风险。 例如,我在一个容器中运行nginx,当我在容器外部执行“ps”时,我可以看到所有的nginx进程。 根7281 4078 0 01:36? 00:00:00 nginx:主进程nginx www-data 7309 7281 0 01:36? 00:00:00 nginx:工作进程 www-data 7310 7281 0 01:36? 00:00:00 nginx:工作进程 www-data 7311 7281 0 01:36? 00:00:00 nginx:工作进程 www-data 7312 7281 0 01:36? 00:00:00 nginx:工作进程 这并不奇怪,因为这是Docker工作的方式 – 这不是虚拟化,虚拟机之外什么都不显示。 使用Docker,容器的进程在名称空间和有限权限内的主机操作系统上运行。 他们直接与主机内核通话。 在这种情况下,我相信我应该configurationSELinux来保护nginx进程而不是docker的进程,就像在没有docker的情况下运行一样。 那是对的吗? 另外,是否有任何特定的Dockerconfiguration更适合运行像nginx这样的web服务器?
我在我的网站上有一个/admin目录,我希望允许pipe理员通过networking表单上传大文件。 以下是我的nginx.com的外观: http { # … client_max_body_size 16M; # … server { server_name example.com; root /var/www/example.com; index index.php; location /admin { client_max_body_size 256M; } # … } } 这不起作用。 /admin/index.php脚本无法上传16Mb: 413请求实体太大的文件 但是,如果我移动client_max_body_size到server块一切正常。 但是我不想只为admin目录做这个改变。 根据文档 , client_max_body_size可以放置在location块内,以仅覆盖所需path的设置。 什么可能是错的?