Articles of nginx

如何设置Nginx SSL块让我们encryption+ certbot

我按照本指南在我的服务器上设置了SSL https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04#step-4 我不遵循这个指南 https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04#step-two 我被卡住了 ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; 部分是因为我无法findnginx.crt和nginx.key文件的位置,或者我基于这个方法,应该做一些不同的事情来使用我的ssl证书

Nginx / uwsgi请求缓冲区或队列

我们的Web服务器在nginx + uwsgi后面运行一个Python应用程序。 有时我们有短暂的高峰(2-5倍平均无需求)一秒钟导致一些请求获得502如果没有工人可用来处理它们。 有没有办法让nginx或uwsgi排队这些请求,并在工作人员可用时提供服务? 反应时间短暂增加会更好,而不会出现错误;-)

索引页面HTML加载没有别的

我有一个节点和快递应用程序,只会提供index.html页面。 它确实使用模板,但它会拉入页眉和页脚,但不是样式和JS。 该代码适用于开发服务器(云9),但不适用于数字海洋生产服务器。 我还没有推出我的应用程序,因为我不能在这里得到它所有的function。 当我去除根路线之外的任何事情时,我正在得到404。 我也得到net::ERR_ABORTED在我的控制台中的每一个CSS和JS文件。 我在整个应用程序目录上设置了755权限。 我使用的Web服务器是Nginx,并将其设置为指向端口8080和/var/www/siteName/appName的反向代理。 代码被设置为在/var/www/siteName/appName/server/public查找静态文件,但不会将其拖到其他任何文件中。 我会发布configuration,如果你们想,但不知道要发布什么文件或哪些部分的文件。 只要问,我会把他们。

如果包含参数,Nginx会redirecturl

这是我得到的情况。 我有一个使用了很多React的网站。 有几个HTML页面和内容被加载到HTML页面取决于所请求的URL(这几乎是一个单一的页面应用程序)。 为了更好的search引擎优化,我为每个这样的URL创build了替代的HTML页面(我知道谷歌机器人可以阅读像React这样的JavaScript页面,但其他search引擎不能)。 当search引擎机器人访问一个React页面时,它会看到这个标签<meta name="fragment" content="!" /> <meta name="fragment" content="!" /> ,然后将这个空参数_escaped_fragment_附加到请求的URL。 在看到附加参数后,nginx返回React页面的替代(prerendered)html页面。 例如,如果请求的URL是/some/nice/url那么机器人如果看到标签<meta name="fragment" content="!" /> <meta name="fragment" content="!" />它会将空参数附加到/some/nice/url?_escaped_fragment_=并被redirect到这个URL /some/nice/url?_escaped_fragment_=的替代html页面/some/nice/url?_escaped_fragment_= 。 如果没有添加空参数,则必须返回React页面(而不是替代html页面)。 所有的prerendered html文件都在文件系统上,并且与URL具有相同的名称,但是最后使用下划线+ .html而不是斜杠。 例如,如果URL是/some/nice/url则文件名称为some_nice_url.html 。 这是在URL的后面添加空参数/some/nice/url?_escaped_fragment_=时必须呈现的html文件。 我怎样才能写一个通用的规则来处理这个问题的nginx? generics我的意思是通用处理所有的URL。 它应该看起来像这样: location "/some/nice/url" { # this should be some regex index some_nice_url.html; alias /path/to/templates/; # /path/to/templates is where prerendered html fires are […]

清漆负载平衡器:规范用户规范后端

所以我有一个关于如何使用负载平衡器指定当前用户到当前服务器的问题? 我有问题与存储在应用程序caching中的产品桶。 客户端根据不同的后端有两个桶。 这是一个问题。 后端symfony。 我试图用散列指标来制作清漆LB。 但是我觉得我做错了,因为没有帮助 一般问题:我该如何解决这个问题? 也许我必须find解决scheme与这个后端之间的同步caching? 有任何想法吗? 我的configuration: backend b1 { .host: "someHost" .probe: {…} } backend b2 { .host: "someHost" .probe: {…} } sub vcl_init { new balancer = directors.hash(); balancer.add_backend(b1, 10.0); balancer.add_backend(b2, 10.0); } sub vcl_recv { set req.backend_hint = balancer.backend(client.ip); }

如何在与docker-compose链接到另一个容器的容器中运行linux守护进程?

免责声明:我在这里发布这个,因为人们开始投票closures这个问题作为“脱离主题”。 虽然有些人认为Docker问题应该在SO上发布,而不是SF,但是其他人却相反。 我有以下docker-compose.yml文件,它运行带有PHP支持的nginx: version: '3' services: nginx: container_name: my-app-nginx image: nginx:1.13.6 ports: – 8080:80 volumes: – ./nginx-default.conf:/etc/nginx/conf.d/default.conf – ./my-app:/var/www/my-app restart: always depends_on: – php php: container_name: my-app-php image: php:7.1-fpm volumes: – ./my-app:/var/www/my-app restart: always /var/www/my-app的PHP应用/var/www/my-app需要与一个linux守护进程进行通信(我们称之为myappd )。 我看到的方式,我需要: 把myappd复制到/usr/local/bin的nginx容器中,用chmod +x使其可执行,并在后台运行。 创build一个不同的容器,将myappd复制到/usr/local/bin ,使用chmod +x使其可执行,并在前台运行它。 现在,我是Docker的新手,我正在研究和了解它,但是鉴于我在使用Docker Composer,我的最佳猜测是选项2可能是推荐的选项? 鉴于我对Docker的知识有限,我不得不猜测这个容器需要某种基于Linux的映像(比如Ubuntu或者其他)来运行这个二进制文件。 所以也许选项1是首选? 或者,也许选项2是可能的一个最小的Ubuntu图像,也许没有这样的形象是可能的? 无论哪种方式,我不知道如何在composer文件上实现它。 特别是选项2,PHP应用程序将如何与守护程序在不同的容器中进行通信? 就像我为nginx / php服务所做的那样,“共享”一个卷(二进制文件所在的位置)就足够了吗? 还是其他什么是必需的?

Nginx反向代理没有按预期传递请求

我有一个Nginx反向代理启动并运行。 它也提供了一个Web应用程序的前端静态内容。 但是,反向代理没有传递请求。 发生什么事情是,当我尝试从静态页面login时,它正在对http://localhost/apps/iv/rest/Login进行POST。 不过,我需要这个POST到http://localhost/iv360/apps/iv/rest/Login 。 我以为我用/apps/iv/rest/ location块正确,但它似乎没有工作。 这是我完整的configuration文件。 events { worker_connections 1024; } http { upstream https_iv360 { server localhost:9443; } upstream http_iv360 { server localhost; } server { listen 80; location / { proxy_pass https://https_iv360/iv360/; } location /apps/iv/rest/ { proxy_pass http://http_iv360/iv360/; } location /apps/iv/resources/ { root /www/data; } } } 这里是Nginx日志的错误。 2017/11/16 13:26:43 […]

如何configurationnginx从基于cookie的文件提供服务

我正在为具有login用户的dynamic内容的电子商务平台工作,但对于注销的用户,许多页面(如产品页面和类别页面)相对静态。 Rails已configuration为在访问时将特定注销页面的副本保存到磁盘。 我希望nginx在检测到注销的用户时提供这些文件。 当用户login时,我们有一个cookie设置,所以我的希望是我可以检查这个。 我的'理想'nginxconfiguration看起来像(在服务器块): location /my_location { if (!$cookie_user_logged_in) { try_files /cached_pages/$uri /cached_pages/$uri.html $uri $uri/index.html $uri.html @rails_application; } } 但是,这是无效的,因为据我所知,根据研究和错误消息,不能把try_files放在if中。 有没有办法用nginx来完成这个任务? 有人告诉我,我应该用另一种工具,如清漆。 我也知道,我可以在Rails中使用动作caching来做事情,并使用片段caching来接近相同的目的。 不过,我想确定这是否是一个可行的select,然后再添加到技术堆栈或进一步投资开发。

Docker化的Nginx + Certbot + tls-sni挑战不适用于续约

我有一个使用docker容器的现有服务: nginx( nginx:1.13.5 ) 节点api(节点容器) 节点网站(节点容器) 我想为api和网站添加SSL证书。 所以我使用certbot/certbot容器来完成,没有任何问题。 我使用dns挑战生成证书,运行以下命令(从本地计算机): docker run –rm -it \ –name certbot \ -v $(pwd)/letsencrypt:/etc/letsencrypt \ certbot/certbot \ certonly –manual -d api.mydomain.com –preferred-challenges dns –renew-by-default –email xxx@xxxx –agree-tos –manual-public-ip-logging-ok 我被要求为我所做的_acme-challenge.api.mydomain.cominputTXT DNSlogging,并且获得了没有任何问题的证书。 然后我更新了我的Nginxconfiguration( /etc/nginx/nginx.conf/api.conf ): upstream api { server node-api:5000 max_fails=3; } map $http_upgrade $connection_upgrade { default "upgrade"; "" ""; } # […]

即使server_name指令不匹配,nginx是否将第一个服务器上下文用作默认值?

我有一个域example.com 我想要有2个子域名: a.example.com和b.example.com指向/var/www/a和/var/www/b 。 所以我使用这个nginxconfiguration: server { server_name a.example.com; root /var/www/a; try_files $uri /index.html; } server { server_name b.example.com; root /var/www/b; try_files $uri /index.html; } 它按预期工作。 但是,当我打开c.example.com它呈现/var/www/a/index.html 请注意,我没有为c.example.com指定任何规则。 那为什么它的行为就像是匹配a.example.com ? 当没有其他匹配的时候,nginx会把第一条规则当作默认规则吗? – 即使该规则中的server_name指令与URL不匹配?