Articles of nginx

nginx和https:nginx:主机在上游找不到

首先请原谅,如果这个问题很简单。 我有一台Ubuntu和nginx的服务器。 总是工作,而http使用,但后我添加证书,并尝试启用https我收到这个错误nginx: [emerg] host not found in upstream "api" 。 这是我的configuration: upstream api { least_conn; server 176.9.91.243:7123; } upstream api2 { least_conn; server 176.9.32.170:7123; } server { # listen 80; listen 443; ssl on; ssl_certificate /etc/ssl/chain.crt; ssl_certificate_key /etc/ssl/ssl_key.key; add_header Strict-Transport-Security "max-age=31536000"; add_header Content-Security-Policy "block-all-mixed-content"; root /var/www/hosting; index index.html index.htm; client_max_body_size 15m; server_name serverName.com; gzip […]

docker容器上的nginx反向代理上的502错误代码

我已经用这个脚本运行一个docker容器与下一个云形象(从这里https://hub.docker.com/_/nextcloud/ ): docker run \ –rm \ –detach \ –publish 54002:80 \ –name cloud.example.com \ –volume /srv/cloud.example.com/:/var/www/html \ nextcloud 我用nginx做了一个反向代理: server { listen *:80; server_name cloud.example.com; proxy_set_header Host cloud.example.com; location / { rewrite ^(.*)$ https://cloud.example.com$1 permanent; } } server { listen *:443 ssl http2; server_name cloud.example.com; proxy_set_header Host cloud.example.com; set $service_port 54002; set $service_ip 192.168.2.33; […]

NGINX性能与大量的服务器块

我无法find有关大量服务器块(大约8k-10k)是否会显着降低NGINX的有用信息。 我们的客户端有1到几百个子域,我们正在研究在一个大的configuration文件中有客户端特定的服务器块,或者许多个别的客户端URL指定为server_names。 要做到这一点的原因是允许NGINX Plus进行客户特定的区域监控,而不是有一个大的区域,每个人都属于这个区域,并有一个整体的指标。 还是有更好的方法来做到这一点,我还没有意识到?

在哪里/如何用Nginx声明memcached服务器的IP?

美好的一天! 我有一个与MyBBconfiguration的论坛。 一切都在Ubuntu 14.04上运行,但我的朋友试图安装16.04上,并保存了一切(网站的configuration,letsencrypt文件,网站的文件,数据库转储等)。 他本可以做sudo do-release-upgrade ,但是不行,他更喜欢备份所有东西并做一个干净的安装。 事情是我现在的任务是把所有的东西,现在与一个sudo nginx -t我得到这个语法错误: nginx: [emerg] no port in upstream "memcached" in /etc/nginx/sites-enabled/forum.example.com:54 检查第54行上面的内容,我看到"$scheme://$host$request_uri" ,它必须先前已经在nginx.conf文件中configuration好了,他忘记了备份。 我有一个memcached服务器,我不知道如何/在哪里声明它。 它在nginx,conf或者在站点的.conf文件中? 让我知道。 这是剩下的configuration。 那里还有其他的东西吗? 提前致谢。 温暖的问候。 server { listen 80; server_name forum.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name forum.example.com; location ~ \.css { add_header Content-Type text/css; } location ~ […]

Docker Swarm模式的networking和负载平衡不适用于我的第二个服务

我的设置 两个节点(2GB RAM,2个vCPU)运行docker引擎(v17.06.1-ce) – 一个群和一个工人。 内部networking带宽:10Gbps。 所有文件和数据库都位于此Docker集群(AWS S3和用于数据库的不同实例)之外。 我正在努力实现的是什么? 我试图创build一个基于“平台”,我推无状态服务和docker处理负载平衡,更新等docker。除此之外,我也试图设置反向代理,并允许特定的服务有权访问此代理。 我到目前为止做了什么? 首先,我创build了一个覆盖networking,称之为“公共”。 (10.0.9.0/24)然后,我在“全局”模式下创build了一个nginx服务。 服务本身附属于“公共”networking。 我检查了我的工作人员和群体节点,并在两个服务运行没有问题。 其次,我创build了docker撰写文件,以便快速部署多个服务。 为了我的testing,我每个撰写文件都保留一项服务: version: '3.3' services: web: image: app1_image:latest networks: – public networks: public: external: name: public 对于第二个服务,我只是改变了图像名称,并保持其他一切。 同时“堆”: docker stack deploy –with-registry-auth –compose-file compose1.yml app1 docker stack deploy –with-registry-auth –compose-file compose2.yml app2 在检查这两个服务之后,我看到这两个服务都在“overlay”networking中,如10.0.9.5(app1_web)和10.0.9.6(app2_web)。 在swarm节点中创buildapp2_web ,在worker节点中创buildapp2_web 。 所以我用下面的方法为我的两个服务创build了两个nginxconfiguration文件: server { listen […]

Nginx的ssl_verify_client;

我正在使用nginx的开源版本作为逆向代理与上游安全文件服务使用docker和自签名证书,我可以在客户端上运行脚本并拉下文件。 我可以全部工作,直到我申请“ssl_verify_client;”,然后我curl,wget和powershell尝试失败。 我的猜测是,我没有正确地生成或注册证书,因此信任链被维护。 我扼杀了一下,看看我是否可以在没有上游或docker的情况下运行它(也就是说,只试图在虚拟机上运行反向代理,只有在“ssl_verify_client on”的情况下才能运行相同的结果)。 我已经在客户端添加了自己的CA证书,并完成了“update-ca-certificates”(我应该在服务器上完成此操作?)。 curl示例(得到“400没有必要的SSL证书发送”):curl -v -s –key client.key –cert client.crt –cacert client.pem https://mysite.dyndns.org/file .txt -o /home/user/Desktop/file.txt 试图诊断问题,我尝试:“openssl s_client -connect mysite.dyndns.org:443”并得到:validation错误:num = 20:无法获得本地发行者证书 很高兴发布我的nginx.conf,我如何生成证书,但最初会问: 我试图做的是可行的吗? curl,wget或PowerShell可以使用自签名证书(而不是购买的证书)? 使用dyndns(没有validation工作)是一个问题? 如果它看起来像我的证书代的问题,有人可以build议一个链接作为如何(我一直在尝试https://jamielinux.com/docs/openssl-certificate-authority/和nate商品网站) 。 “LetsEncrypt”是“正确答案”吗? 我知道我可能需要发布更多的命令/configuration使用等细节任何帮助表示赞赏。 谢谢!

Nginx多虚拟主机configuration

根据我们平台的要求,每个网站都将自动与DNSconfiguration一起托pipe,使网站在预订的域名上生效,为每个域和子域configurationNginx。 我们需要为Nginxconfigurationdynamic的虚拟主机configuration,所以我们提出了三个选项,下面会提到。 需要build议哪一个是正确的select,因为我们的网站基础每天增长30到40个新网站,已经有2000多个网站在这个平台上注册。 除此之外的任何更好的select也将被考虑。 大量虚拟主机configuration 这可以通过使用正则expression式使server_namedynamic化来实现。 优点: 单个文件,单个虚拟主机。 无需为每个新的域名注册重新加载Nginx。 可以包含任意数量的域。 缺点: 如果有人发现服务器正在处理任何域请求,就可能导致DDoS攻击。 可以减慢响应,因为每个请求数据库查询将被执行以validation平台是否存在域/子域。 克服问题的方法: 像Memcache或Redis这样的caching可以用来caching所有的域和子域,所以只有很less的数据库查询来检查域和子域的存在(只有在caching失败的情况下) 使用Cloudflare,可以帮助我们预防DDoS。 Nginx也可以configuration为阻止对经常发送请求的某些IP的请求。 某些IP地址和机器人负责任何types的攻击也可以阻止使用不好的机器人阻止程序configuration。 单独的虚拟主机文件configuration 一个接收到新域请求的脚本将在一个单独的文件中创build虚拟主机,使其可用于Nginx,启用它并重新加载Nginx。 优点: 单独的虚拟主机注册每个新的域名。 只允许注册的域进行处理。 缺点: 需要为每个注册的新域名触发脚本,这些脚本将以sudo user / root用户身份运行 可能会导致需要由Nginx加载并处理的1000多个文件。 对于每一个新的虚拟主机,Nginx都需要重新加载。 请求处理和pipe理可能会成为一个麻烦,如果太多的域名注册。 解决问题的方法: 对于所有虚拟主机,请使用单个文件而不是多个文件。 单个文件多个主机configuration 接收到新域请求的脚本将在Nginx使用的单个文件中追加新的虚拟主机,并重新加载Nginx。 优点: 分别注册每个新域的虚拟主机。 只允许注册的域进行处理。 将所有虚拟主机的文件数量减less到一个。 缺点: 由于太多的虚拟主机条目,文件可能变得很重。 由于要查看一些虚拟主机,可能会降低Nginx处理速度。 对于每一个新的虚拟主机,Nginx都需要重新加载。 解决问题的方法: 没有其他解决scheme,而不是拥有大量虚拟主机

Nginx php-fpm在高stream量网站上摆脱502错误

目前我有以下规格的服务器: 32 core 128gb RAM 1TB SSD hardisk 5Gbps network uplink 目前的设置是nginx + php-fpm,没有任何负载均衡设置 nginx.conf fastcgi_connect_timeout 9000; fastcgi_send_timeout 9000; fastcgi_read_timeout 9000; fastcgi_buffer_size 256k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 512k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi-56.sock; fastcgi_index index.php; include fastcgi.conf; include pathinfo.conf; } PHP-fpm.conf [www] listen = /tmp/php-cgi-56.sock listen.backlog = […]

Nginx位置块与反向代理打破meteor

我有两台服务器: (A)反向Nginx代理,在内部或B路由请求 (二)meteor部署使用meteor1.2.11版(Nginx里面的Docker) 我有两个上游目的地,每个服务器上有一个: upstream remote-app { server 123.45.67.890:8080; } upstream local-app { server localhost:7000; } 如果我使用单独的服务器块,一切工作正常。 server { listen 80; server_name local.* local.myapp.com; access_log /var/log/nginx/local.myapp.access.log; error_log /var/log/nginx/local.myapp.error.log debug; error_page 404 /4xx.html; error_page 500 502 503 504 /5xx.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://local-app; […]

在Nginx / Passenger中托pipe的Ruby / Rails应用程序的头文件中设置环境variables

我为Redmine安装了一个服务器,使用Nginx / Passenger运行。 服务器还托pipeGitlab,并且进展顺利。 我为Redmine提供了一些SSO插件(我发现并安装了这个插件),它需要一个环境variables来填充用户名:这是一个棘手的问题。 到目前为止,我可以分开 : 从X-Forwarded-User头获取用户名 自动连接到Redmine传递用户名作为一个常数值 自动连接到Redmine传递正确的用户名作为一个常数值testing当前转发的值=>这是丑陋的,需要做每个现有的用户testing 但我不能直接设置用户名与转发的值,它看起来像$ http_x_forwarded_uservariables不被评估… 有一个很好的解决scheme吗? 我目前的Nginx / Passengerconfiguration: upstream gitlab-workhorse { server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0; } server { listen 0.0.0.0:80; listen [::]:80 ipv6only=on default_server; server_name server.example.com server_tokens off; ## Don't show the nginx version number, a security best practice root /opt/gitlab/embedded/service/gitlab-rails/public; location / { proxy_read_timeout 300; proxy_connect_timeout 300; […]