Articles of nginx

Nginx的子域名SSL证书

我有一个网站,需要回答任何数量的任意子域名,例如client1.example.com , client2.example.com等一切都落后于SSL。 我真的想使用Let's Encrypt,当然,这意味着没有通配符证书。 有没有办法创build一个单一的server { … }块加载相应的目录,或者我需要单独的configuration为每个客户端子域? 本质上,我想要一个server块应答*.example.com ,但基于子域加载适当的证书。 证书全部存储在/etc/letsencrypt/live/[subdomain].example.com/ 。

使用docker + nginx + php-fpm服务静态内容

我正在尝试使用dockerconfiguration一个php webapp。 这个想法是在一个独立的容器中使用php-fpm运行应用程序,并有另一个运行nginx的容器。 这个设置的想法是使用相同的nginx容器代理请求到已经在同一台机器上工作的其他webapps。 问题是我不能让nginx正确处理静态文件(js,css等),因为对那些请求保持去fpm 。 这就是文件系统的样子: / ├── Makefile ├── config │ └── webapp.config └── webapp └── web ├── index.php └── static.js 我使用一个看起来像这样的Makefile来运行整个事情(对docker-compose不感兴趣): PWD:=$(shell pwd) CONFIG:='/config' WEBAPP:='/webapp' run: | run-network run-webapp run-nginx run-network: docker network create internal-net run-webapp: docker run –rm \ –name=webapp \ –net=internal-net \ –volume=$(PWD)$(WEBAPP):/var/www/webapp:ro \ -p 9000:9000 \ php:5.6.22-fpm-alpine run-nginx: docker […]

Nginx默认页面的自定义状态码

我只有在Nginx的上游经验,而不是静态文件的服务。 Nginx有一个默认的服务器,提供一个欢迎使用nginx! 页面,并在虚拟主机上没有匹配时显示。 我想保持这个默认页面,但覆盖200状态代码为404 。 我不知道如何去做这件事。 有任何想法吗?

从nginx访问日志中排除IP

如何从访问日志中排除一些IP地址? 这是我的configuration: server { listen 443 ssl; […] access_log /var/www/web/log/access.log; error_log /var/www/web/log/error.log; location / { try_files $uri $uri/ /index.php?$args; if ($remote_addr = "80.80.80.80") { access_log off; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php5-fpm.sock; } […] } 我试过这个: map $remote_addr $log_ip { "80.80.80.80" 0; default 1; } server { […] access_log /var/www/web/access.log main if=$log_ip; […]

nginx负载均衡器在pm2前面加上nodejs集群

我试图设置一个生产环境,前端运行nginx,后端使用多个nodejs应用程序,使用pm2进行进程pipe理。 这个想法是在后端(和可选的垂直)允许水平的可伸缩性。 用nginx(上游)使用负载均衡,并在pm2后端多进程是好主意? 这可能是冲突的或不必要的? 如果在前端使用负载平衡可以使用单个进程(水平)创build多个后端机器。 或者可以只使用nginx作为http服务器,并在后端使用pm2多进程(垂直)。 或者使用nginx负载均衡和pm2多进程(水平和垂直) 过去我们在机架空间调整机器的时候遇到了问题,所以我更喜欢从前端水平平衡。

NGINX:将请求副本发送给另一个上游

我们的团队开发了一个分析应用程序,logging和分析所有传入(而不是丢弃)的请求。 就此而言,我必须将所有请求的副本发送到我的反向代理解决scheme中的另一个上游。 单独使用NGINX可能吗? 还是有其他解决scheme,对当前的反向代理结构影响最小? 在NGINX中最好这样做,以便NGINX的请求处理已经完成,请求将与发送到上游目的地的请求相同。 PS:分析应用程序不会返回任何响应

如何从其他用户黑客WP安装硬化nginx虚拟主机(托pipeWordPress)

概述: 我有十几个WP安装在Ubuntu 14.04 LTS,w / PHP 5.5.9和Nginx 1.4.6上。 MySQL在备用节点上运行,而不是在公共networking上运行。 目标: 要让每个WP安装的目录和文件不是世界可读的。 如果恶意用户访问特定的WP安装,我不能让他们能够导航到备用WP安装并读取DB凭据。 细节: Nginx作为www数据运行。 为每个虚拟主机创build一个没有shell的用户。 每个虚拟主机都支持一个WP安装。 PHP-FPM池特定于每个用户/虚拟主机运行。 PHP-FPM池通过socks连接w / Nginx,而不是回环IP。 阅读下面的Wordfence文章,我试图设置文件权限,如下所示: 文件 – 640 目录 – 750 当我像这样configuration权限时,作为www-data运行的Nginx不能再正确访问WP文件。 如果我将权限设置回644 & 755 ,一切都按预期工作。 网站安装在以下结构中: /var/www/site1.com/public /var/www/site2.com/public /var/www/site3.com/public 等等。 每个目录由相应的用户和用户组拥有。 即: site1-com:site1-com /var/www/site1.com 我们有一个WP网站被黑客攻击,他们能够得到一个PHP文件pipe理器脚本到服务器上。 我的理解是这个脚本是由用户www-data运行的。 (检查w / ps aux )如果这是真的,我怀疑恶意用户可以访问所有其他WP安装通过他们的PHP文件pipe理器脚本。 如何改善我的权限设置以加强安全性? 我愿意接受所有build议,即使这意味着重新configuration整个堆栈安装。 提前致谢。

重写nginx规则(Opencart)

Opencart有这个URL结构: http://example.com/index.php?route=common/home http://example.com/index.php?route=account/register http://example.com/index.php?route=checkout/cart http://example.com/index.php?route=checkout/checkout …我想从index.php?route=直到第一个/ ,正则expression式是index.php\?route\=[^\/]*\/ ,所以所需的url将是,例如, http://example.com/checkout 。 我试过了: location @opencart { rewrite index.php\?route\=[^\/]*\/ / last; rewrite ^/(.+)$ /index.php?_route_=$1 last; } 也试过: location / { if ($query_string ~ "^route=common/home$"){ rewrite ^/index\.php$ http://www.example.com? redirect; } } …但目前为止还没有运气,我仍然可以在URL中看到route=common/home 。 这是我目前的Nginxconfiguration: location / { try_files $uri @opencart; } location @opencart { rewrite ^/(.+)$ /index.php?_route_=$1 last; } […]

使用caching文件mtime作为Last-Modified标题值

在nginx 1.10.1我代理外部网站(不在我的控制之下)在本地caching图像。 我的configuration如下: location ~ /cachedimages/(?<productcode>.*)/(?<size>.*)/image.jpg { resolver 127.0.0.1; proxy_pass https://www.externalsite.example/api/getImage/?productcode=$productcode&size=$size; proxy_cache imgcache; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; expires 1M; access_log off; add_header 'Cache-Control' "public"; add_header Last-Modified $upstream_http_last_modified; add_header X-Proxy-Cache $upstream_cache_status; } imgcache定义如下: proxy_cache_path /var/cache/nginx/imgcache levels=1:2 keys_zone=imgcache:10m max_size=1g inactive=24h; 远程服务器不会提供Last-Modified标头: curl -X GET -I https://www.externalsite.example/api/getImage/?productcode=abc123&size=128 HTTP/1.1 200 OK […]

如何在s3上使用前端,在具有相同域的另一台服务器上使用后端

我有一个在Amazon S3上的应用程序的前端部分和在cloud66上的后端,与NGinx。 DNS的“www.website.com”指向S3,“api.website.com”指向nginx。 我想为这两个网站使用相同的域名,因此“www.website.com”仍然服务于前端,“www.website.com/api”必须服务于后端。 我试图在S3上添加一个redirect规则,但它做了一个额外的请求redirect。 我能做什么?