Articles of nginx

Nginx + PHP-FPM:让php处理文件扩展名

我正在尝试处理一些处理一些RESTful URI的PHP脚本,并知道哪些格式的最终​​用户需要数据,我把它当作URI中的扩展来处理,例如: example.com/foo/bar.json?q=x&a=y –> data in ajax format example.org/foo/bar.xml?q=x&a=y –> data in xml format 我在我的开发机器上使用了Apache httpd + modphp,它工作的很好,但是舞台服务器使用CentOS + Nginx + PHP。 在那里,nginx拦截并尝试处理一个静态json文件并返回404。 如何防止Nginx处理某些文件types(例如,json,xml)并让PHP处理这些? 我的Nginxconfiguration: server { # listen [::]:443 ssl http2 accept_filter=dataready; # for FreeBSD # listen 443 ssl http2 accept_filter=dataready; # for FreeBSD # listen [::]:443 ssl http2 deferred; # for Linux # […]

Nginx +邮件开放端口漏洞

我只是在这里大声思考,想知道是否需要开放端口(入站)才能继续使用我的邮件。 是不是有可能redirect交通可以说通过一个子域(imap.domain.tld或pop3.domain.tld)托pipe在端口80或443,然后通过proxy_pass与nginxredirect的imap或pop3? 如果这不是我走的路我想知道为什么像谷歌这样的大家伙都有一个单独的所有这些协议的子域… 如果可能的话,我想尽可能地收紧我的vps,但是仍然保留neccesairy的东西。

新鲜的Ubuntu 16.04 Nginxconfiguration服务旧的静态文件

我有一个非常基本的登陆页面。 在过去的几天里,我一直在打一个非常奇怪的问题。 例如,该目录包含: vanilla> ./files/ ./index.html ./main_style.css files> ./back.gif ./back1.gif ./logo.png index.html的内容: <!DOCTYPE html> <html> <head> <title>Vanilla</title> <link rel="stylesheet" type="text/css" href="main_style.css"/> </head> <body> <div> <img class="logo" src="files/logo.png" /> </div> </body> </html> main_style.css的内容: html { background-image: url("files/back1.gif"); background-repeat: repeat; } img.logo { width: 471px; height: 384px; position: absolute; top: 50%; left: 50%; margin-left: -235px; margin-top: -192px; […]

如果远程path不通过proxy_pass存在,则服务特定的远程path

我已经解决了这个差不多半天了。 🙁 在我的笔记本电脑上运行的Nginx上,我不使用proxy_pass,这个try文件工作的很好。 我写的JavaScript web应用程序在加载页面时执行客户端路由。 但是,如果网页被刷新,则是接收请求的服务器。 我在我的笔记本电脑上运行我的Nginxconfiguration location /viewer { try_files $uri /viewer/index.html; } 使用上面的configuration,如果我请求在我的文件系统上不存在的http:// localhost / viewer / getservice ,我将与/viewer/index.html一起提供服务。 这工作很好! 但是,我们在工作中有不同的configuration。 我们所有的静态文件/ html页面都存储在上游的S3存储桶中。 这是我们的工作configuration location /viewer { proxy_pass http://s3-bucket-server/viewer; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Origin' $cors_header; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,Origin,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } 当我像这样访问它时,上面的configuration很好用, http://internal-app.docs.svr/viewer 。 我可以点击我们的左侧导航,这改变了客户端的位置path http://internal-app.docs.svr/viewer/settings http://internal-app.docs.svr/viewer/docs http://internal-app.docs.svr/viewer/permissions etc 但是,如果假设我在http://internal-app.docs.svr/viewer/permissions并且单击了浏览器,通常会发生的情况是,它会在我们的Web服务器internal- […]

nginx和php-fpm中的“File not found”错误

我已经看到更多的人有同样的问题,但他们的解决scheme没有为我工作。 我有centos 7 + nginx + php-fpm(版本7.1)。 当我尝试访问我的虚拟主机时,我得到“找不到文件”。 由php-fpm触发,这是我在nginx日志中看到的: 2017/02/27 11:18:54 [error] 7540#7540: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.56.1, server: site.dev, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site.dev" php-fpm和nginx都与nginx用户一起运行 root 7539 0.0 0.0 45704 988 ? Ss 11:18 0:00 nginx: master process /usr/sbin/nginx -c […]

基本authentication的替代服务器级Nginx或使用基本authenticationencryption授权标头

我正在一个HTTP代理服务器上工作,我想添加一个安全层,只有我的应用程序被允许从Android(应用程序)networking视图访问代理。 我已经用Nginx成功实现了基本authentication。 我想知道,如果有一种方法来encryption授权头中的可见(base64)string(添加额外的安全层)。 因为很容易从这样形成的base64string中获得默认的用户名和密码。 如果不是,那么只有服务器(nginx)才能实现更高级别的安全。 问题closures后编辑 我仍然不明白为什么这个问题被标记为closures( 问题是直截了当的 )。 我在问题标题上看到了保留字幕,但没有收到任何关于个人资料的通知,在SOF的早些时候,我错过了这个意思! 回到这个问题,我想我find了解决这个问题的方法。 可能的解决scheme 我已经encryption用户名和密码,然后通过使用AES-256-CBC将它们传递到服务器( https://stackoverflow.com/questions/16952245/encrypt-decrypt-a-string-based-on-a-salt-key ),并在服务器端使用脚本语言lua,允许与nginxvariables(如用户名和密码)进行交互( https://nileshgr.com/2016/03/08/group-based-http-authentication-using-nginx-and -mysql )来执行任何types的任务。 在我的情况下,我使用lua解密用户名和密码,并执行一些数据库检查。 Lua还支持与示例中提到的数据库引擎的连接。

拦截从我的应用程序发出的电子邮件,以便我可以search和replace正文中的文本?

我有以下情况。 我的应用程序在Docker中,应用程序中的所有组件使用容器名称相互交谈。 但是,当应用程序发送出站电子邮件时,它会使用我们无法更改的某个值。 所以不要试图弄清楚为了实现这个目标而必须改变的一切。 我想要一种方法,可能使用nginx或其他软件拦截传出的电子邮件执行search和replace身体,并将错误的主机名更改为应用程序的主机名。 我知道ngx_http_sub_module会工作的东西,但我不知道这是否适用于电子邮件。 任何人都知道的方式来做这样的事情?

持续高CPU使用率,从一个网站

我在DigitalOcean有一个服务器,它主要用来运行一些低stream量的WP网站,90%的网站运行良好。 但! 其中一个网站,不断有5-20(取决于我把最大的孩子),每个进程正在吃5%-20%CPU的任何地方,可以在这里看到 。 它在一天中的所有时间都保持这种状态,但是我怀疑它们会变得越来越活跃。 重新启动php-fpm或其他任何服务都无济于事 – 我已经查看了日志中找不到任何我认为会导致此问题的内容。 我在整个服务器上还是很新的东西,我不得不说我不确定是什么原因造成的。 但如果有人能指引我正确的方向,我将不胜感激! 一点信息: DigitalOcean Droplet (4gb ram, 2 CPUs) CentOS 7.3.1611 x64 nginx / php-fpm Running WP sites (6-7 sites) PHP-fpm.conf listen = 127.0.0.1:9001 listen.allowed_clients = 127.0.0.1 user = int group = int pm = dynamic pm.max_children = 10 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = […]

Nginx请求子集到不同的池

我有一个nginx服务器的一些请求是慢的,因此可以饱和一个PHP的FPM池。 我不介意这些请求是否被删除,更重要的是它们不会影响正常的请求。 我认为我可以为这些请求创build另一个有限的PHP-FPM池,我已经完成了这个任务,但是我正在努力地处理nginx的一些事情。 我目前的configuration看起来像… location ~ \.php$ { include snippets/fastcgi-php.conf; # With php7.0-fpm: fastcgi_pass unix:/run/php/php7.0-fpm.sock; } 我想要发生的是,对某些显式path(如/test/update.php任何请求转到另一个具有fastcgi_pass unix:/run/php/php7.0-fpm-secondary.sock;地址的池fastcgi_pass unix:/run/php/php7.0-fpm-secondary.sock; 。 这可能吗?

Nginx偶尔会返回403禁止某些API / *路由

我使用Nginx作为node.js服务器的反向代理,我有以下路由,它们以: – /api/… – /auth/… 如果我以隐身模式打开我的网站,并尝试提交一个表单,坚持使用路由'/api/user'我得到403禁止。 我很困惑,在我的本地机器与服务器运行vagrant和nginx我从来没有这样的问题。 在制作中,我也设法成功地在上述路线上提交了几次表单,但是从来没有进入隐身模式。 我只代理某些路由到nodejs像这样: location ~ ^/(api|user|auth|socket.io-client|sitemap.xml) { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header Upgrade $http_upgrade; proxy_ssl_session_reuse off; proxy_redirect off; proxy_set_header Connection 'upgrade'; proxy_cache_bypass $http_upgrade; proxy_http_version 1.1; proxy_pass_header X-CSRFToken; add_header X-Frame-Options SAMEORIGIN; sendfile off; proxy_pass http://nodejs_upstream; } 我检查了路由'/api/user'正被上面的块正确捕获,所以也许它涉及到nodejs服务器的权限,但我坚持在这一点上。 谢谢你的帮助。