Articles of nginx

如何configurationnginx密码保护包含.htpasswd文件的文件夹?

我希望能够将.htpasswd文件放入由nginx提供的文件夹中,以便使nginx使用HTTP auth basic保护相应的location 。 我正在考虑这样的configuration: server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /var/www; index index.html index.htm; location / { try_files $uri $uri/ =404; } ########################################## ############################# note below location <any folder that contains a .htpasswd file> { auth_basic "Authentication Required"; auth_basic_user_file <respective folder>/.htpasswd; } ############################# note above ########################################## location ~ /\. […]

nginx日志php-fpm的stderr输出在看似随机的位置被切断

自从我开始使用一个产生一个长的调用链的PHP库之后,debugging它的问题就变得越来越困难了,因为我的错误日志最终包含这样的输出结果:( 一些值已经被*清空了) 2017/08/23 10:47:26 [error] 13057#13057: *206119 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught ActiveRecord\DatabaseException: PDOException: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "" in /var/www/********/vendor/php-activerecord/php-activerecord/lib/Connection.php:337 Stack trace: #0 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Connection.php(337): PDOStatement->execute(Array) #1 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Table.php(237): ActiveRecord\Connection->query('SELECT * FROM "…', Array) #2 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Table.php(219): ActiveRecord\Table->find_by_sql('SELECT * FROM "…', Array, false, NULL) #3 […]

问题在Nginx上部署Flask Rest Api

我试图部署我的瓶apirestnginx(在子域上)没有成功。 我已经按照这个例子从数字海洋和一切工作正常,但后来我改变了教程示例代码我的我的和POST请求根本不工作。 我正在使用Postman Chrome应用程序,每次我做一个POST请求到“api.domain.com/CreateUser”我得到一个404错误: “在服务器上找不到请求的URL,如果你手动input了URL,请检查你的拼写,然后重试。 这是我的VHconfiguration: server { listen 80; server_name api.domain.com; location / { include proxy_params; proxy_pass http://unix:/home/ubuntu/apirest/apirest.sock; } } 这是python文件(flask api示例): from flask import Flask, jsonify, url_for, redirect, request from flask_restful import Resource, Api, reqparse from flask_cors import CORS, cross_origin app = Flask(__name__) CORS(app) api = Api(app) class CreateUser(Resource): def post(self): return jsonify({ […]

为什么当Apache不能通过Apache proxy的时候呢?

我在我的apache服务器上有一个SSL主机,在VirtualHost中有以下内容: <VirtualHost 217.147.92.100:443> ServerName server.com ServerAdmin email@email.com DocumentRoot /somepath/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/something/fullchain.pem SSLCertificateKeyFile /etc/something/privkey.pem <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown SSLProxyEngine […]

nginx Web服务器使用元数据请求泛滥NFS

我有一个使用nginx服务器(EC2)和NFS驱动器来存储CMS文件(EFS)的简单AWS云。 亚马逊有着名的信用,我在一个非常低的stream量云上没有信用。 经过调查发现,EC2正在淹没EFS的元数据请求。 我只是不知道如何以及为什么? 所有文件共有8GB的NFS,他们都是PHP文件。 静态文件被卸载到S3。 EC2和EFS之间的stream量大约是每秒1MB,但是元数据stream量是每秒5MB! 这就是每分钟100-300MB的元数据stream量! 在检查nfsstat并转储stream量后,发现有90%的stream量是GETATTR请求和响应。 但观察EC2,处理器几乎睡着了,所以处理5MB每秒听起来超现实。 不提1MB传输的5MB元数据。 我想做更多的search,但我的知识和谷歌已​​经结束,所以不知道从这里。 试图利用lsof和nsfstats,无法find世界上需要这么多的元数据。 任何帮助将非常感激。 编辑:如果你正在寻找一个解决scheme,因为这个或类似的原因用尽AWS EFS学分 – EFS学分是基于你正在采取的空间。 该解决scheme(来自AWS支持团队)将创build虚拟文件以增加您的贷项余额。 在我的情况下,通过命令添加50GB的“空”占用空间的技巧: dd if=/dev/zero of=/path/to/efs/dummyfile bs=1G count=10 以上将在EFS上创build10GB的“空”文件,这将增加您的信用

存储解决scheme的一个非常高的容量nginxcaching反向代理

我试图把一个caching系统放在我们的网站前,目前一直困扰着使用哪种存储解决scheme! 所以基本上它是一个媒体stream媒体网站,这是一个非常宽带和存储时态的系统。 由于这些caching服务器位于多个位置,因此最好具有高容量存储,因此不使用大量带宽。 我有2个选项: 1-使用一致性哈希LB将请求转发到caching服务器。 2-使用类似GlusterFS或SAN的东西… 在两种情况下都需要一个高容量的networking。 但在可扩展性,延迟,networking开销和成本方面,最好的解决scheme是什么? ***我主要关心的是当单个节点不够时,nginxcaching使用什么样的存储?

页面没有正确redirect

我在nginx后面托pipe了kibana,而且它已经运行了将近3个月了。 但今天,我得到这个page isn't redirecting properly 我去检查日志,看起来像是在login页面和home之间循环。 xx.xx.xx.xx – user [28/Aug/2017:12:42:03 +0000] "GET /kibana/app/kibana HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0" xx.xx.xx.xx – user [28/Aug/2017:12:42:03 +0000] "GET /kibana/login?next=%2Fkibana%2Fapp%2Fkibana HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0" . . xx.xx.xx.xx – user [28/Aug/2017:12:42:03 +0000] "GET /kibana/app/kibana HTTP/1.1" 302 […]

Nginx:客户端发送超过所需大小的分块主体时断开连接

在nginx中有以下指令client_max_body_size : 设置“Content-Length”请求标题字段中指定的客户端请求主体的最大允许大小。 如果请求中的大小超过configuration的值,则413(请求实体太大)错误将返回给客户端。 正如它所说的,当在请求中提供Content-Length时使用。 我正在使用nginx作为反向代理。 不幸的是,我的nodejs为一个特定的URI实现需要一个POST正文提供Transfer-Encoding: chunked – 否则打破。 我仍然需要限制接受的身体尺寸来防止DoS。 我想让nginxclosures连接,如果太多的字节已经在正文中发送。 nginx有这个function吗? 或者,我会更好地实施nodejs服务器?

Nginx的ERR_TOO_MANY_REDIRECTS时使用proxy_pass一个简单的设置

让我跳进去吧。 这是我的设置,改变了域名: upstream nodejs { server 127.0.0.1:8081; keepalive 256; } # Redirect all non-HTTPS to non-WWW HTTPS server { listen 8080; server_name "~^(?:www\.)?(.*)$"; return 301 https://$host$request_uri; } # Redirect WWW HTTP to non-WWW HTTP server { listen 4430; server_name "~^www\.(.*)$"; return 301 https://$1$request_uri; } # Reverse-proxy to http://nodejs server { listen 4430; server_name "~^(?!www\.).*$"; client_max_body_size […]

每个位置的Nginxparsing器

什么是每个位置使用parsing器的优点/缺点,我发现这个configuration在服务器上,但我的猜测是,它不是“重新解决”,因为proxy_pass不是也使用variables location /foo { proxy_pass http://foo_backends; resolver 10.0.0.2 valid=300s; resolver_timeout 10s; } location /bar { proxy_pass http://bar_backends; resolver 10.0.0.2 valid=300s; resolver_timeout 10s; } 从文档: 当您使用variables在proxy_pass指令中指定域名时,NGINX在TTL到期时重新parsing域名。 因此,如果我是正确的,以前的configuration可以像这样重写: resolver 10.0.0.2 valid=300s; resolver_timeout 10s; location /foo { set $foo_backend_servers foo_backends.example.com; proxy_pass http://$foo_backend_servers; } location /bar { set $bar_backend_servers bar_backends.example.com; proxy_pass http://$bar_backend_servers; } 这是正确的还是有一些技巧,每个位置使用位置? 是否可以通过使用每个位置的parsing器,不需要创build一个variables并将其传递给proxy_pass ?