Questions tagged «nginx»

Nginx(“ eNgine x”)是一种轻量级的高性能HTTP服务器,反向代理,TCP流代理和邮件代理,在类似BSD的许可证下发布。

5
Apache的替代品
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我们当前的堆栈是Apache + Tomcat + MySQL,使用 ProxyPass AJP将请求从Apache触发到Tomcat。我们还在同一站点上运行PHP for Wordpress,因此需要工作.htaccess文件。为了解决一个令人烦恼的问题(请参见此堆栈溢出页面),我们正在考虑其他堆栈。请注意,我们通常很喜欢apache,但是这个问题是一个阻碍因素:如果我们不能解决它,就不能使用Apache。 备选方案包括: 仅Tomcat Glassfish(Java应用程序服务器,从Tomcat派生) 码头(Java服务器) 树脂类 LightTPD(轻量级HTTP服务器) Nginx(轻量级HTTP服务器) 从我的角度来看,解决方案分为两个阵营:纯Java阵营(例如Glassfish);或分裂阵营,例如我们当前的Apache + Tomcat。我们喜欢纯Java解决方案的想法,因为更少的活动部件就意味着更少的出错。但其中任何一个都支持PHP,.htaccess文件等吗? 从理论上讲,我们可以采用另一种方式进行拆分-具有一个简单的前端,仅在需要这些功能的位上代替Apache-但实际上,这是请求的80%。 人们建议什么选择?

1
“低地址位无意义”是什么意思?
我试图将对Internet的访问限制为博客上的登录页面,并仅使其从我的Intranet可用。 因此,我定义了以下位置 location ~/ghost/signing { allow 192.168.0.1/24; deny all; } 重新启动Nginx时,出现以下警告:的低地址位192.168.0.1/24在/etc/nginx/sites-enabled/site 此外,我无法从我的Intranet访问该位置。 因此,我猜想allow语句未“加载”,最终我拒绝了对该/ghost/signin页面的所有访问。 为什么低地址位没有意义,我该如何措辞该语句以使其按预期工作? 我试图用谷歌搜索低地址位是没有意义的,但是我最终只能以我认为是俄语的帖子发表文章,而且我不知道如何从俄语翻译。
15 nginx 

1
在Nginx配置文件中分割长行
为了不将垃圾传递给后端,我对location指令使用了严格的正则表达式。看起来像这样: location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/...(more|restrict).ext { # other directives } 我想将行折叠为80个字符,是否可以拆分配置?以下结果导致语法错误,但这是我要寻找的东西: location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/"\ "...(more|restrict).ext" { # results in a literal newline (%0A) being accepted location ^~ "/(some|stuff|more|bar|etc(-testing)?)/[a-zA-Z0-9]+/ ...(more|restrict).ext" { 我在文档中找不到提示(http://wiki.nginx.org/ConfigNotation或http://wiki.nginx.org/HttpCoreModule#location都未提及折线)

3
nginx不区分大小写的重写
我试图使我的Nginx重定向尽可能干净。我知道〜*是不区分大小写的,但是我只能在示例2中使用它。 例子1 rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; 例2-这行得通,但是效率不如上一行。 if ( $request_filename ~* foobar ) { rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect; } 有没有一种方法可以对示例1进行不区分大小写的重定向,而又不会太混乱呢? 谢谢。
15 nginx  rewrite 

2
nginx:上游有多个服务器指令?
我正在尝试打包2个使用nginx作为代理的应用程序,并将每个配置文件传递到中/etc/nginx/conf.d/。 在一个文件(combined.conf)中执行此操作效果很好: upstream backend1 { http://localhost:8989; } upstream backend2 { http://localhost:8990; } server { location /backend1/ { proxy_pass http://backend1; } location /backend2/ { proxy_pass http://backend2; } 但是,当拆分为2个文件时,重定向之一会系统失败: backend1.conf: upstream backend1 { http://localhost:8989; } server { location /backend1/ { proxy_pass http://backend1; } backend2.conf: upstream backend2 { http://localhost:8990; } server { location …
15 nginx 

3
如何在非标准端口上运行Nginx SSL
我意识到这看起来至少是其他一些问题的重复,但是我已经阅读了几次,但仍在做错事。 以下是位于myexample.com nginx配置文件中的内容/etc/nginx/sites-available。 server { listen 443 ssl; listen [::]:443 ssl; server_name myexample.com www.myexample.com; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem; #Configures the publicly served root directory #Configures the index file to be served root /var/www/myexample.com; index index.html index.htm; } 它有效,当我转到https://myexample.com时,将提供内容并且连接是安全的。因此,此配置似乎很好。 现在,如果我将ssl端口更改为9443并重新加载nginx配置,则该配置将重新加载而没有错误,但是访问https://myexample.com时浏览器将显示错误(无法访问该网站/ myexample.com拒绝了连接。ERR_CONNECTION_REFUSED) 我在这里,这里和这里(以及其他地方)尝试过建议和文档,但是我总是收到ERR_CONNECTION_REFUSED错误。 我应该注意,我可以使用非标准端口,然后在URL中明确键入该端口,例如https://myexample.com:9443。但是我不想那样做。我想要的是用户能够在任何浏览器中键入myexample.com并使nginx自动重定向到安全连接。 同样,使用标准443 SSL端口时,我也没有任何问题。 编辑:我在debian / …
15 nginx  ssl 

3
基于用户代理的Nginx重定向
这是我当前的nginx conf: server { listen 90; server_name www.domain.com www.domain2.com; root /root/app; location / { try_files $uri =404; } location ~ /([-\w]+)/(\w+)/ { proxy_pass bla bla } } 它工作正常,两者www.domain.com并www.domain2.com提供相同的内容。 现在我想添加 如果用户正在访问www.domain.com并且用户代理是xxx,则重定向到www.domain2.com 我已经搜索并尝试了很多方法,但是它们都不起作用。
15 nginx 

2
nginx uLimit'worker_connections超过打开的文件资源限制:1024'
我不断收到此错误,nginx/error.log并让我发疯: 8096 worker_connections exceed open file resource limit: 1024 我已经尝试了所有我能想到的东西,但无法弄清楚什么限制了Nginx。你能告诉我我想念什么吗? nginx.conf 有这个: worker_processes 4; events { worker_connections 8096; multi_accept on; use epoll; } 我这样更改了系统的Ulimit security/limits.conf: # This is added for Open File Limit Increase * hard nofile 199680 * soft nofile 65535 root hard nofile 65536 root soft nofile 32768 …
15 linux  nginx  debian  ulimit  files 

2
Nginx不缓存数据
我在nginx代理后面有一个REST API。代理工作正常,但是我无法缓存任何响应。任何帮助将非常感激: Nginx配置: worker_processes 10; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } http { proxy_cache_path /path/to/cache/dir keys_zone=one:60m; proxy_cache_methods GET HEAD POST; upstream backend { server server1 backup; server server2 weight=5; } access_log logs/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip …
15 nginx  proxy  cache  solr 

1
Nginx-将单个URL映射到文件
我找不到如何将单个URL映射到单个静态文件的方法。我试过了: location /feeds/seznam/ { alias /path/to/file/feed.xml; } 但这不起作用(在日志中,我看到它会将index.html附加到路径中)。
15 nginx 

2
如何在nginx中遵循HTTP重定向?
我有一个基于Nginx的HTTP代理,我想处理其中的所有HTTP重定向,以便客户端仅获得重定向链中的最后一个响应。 基本代码如下: location /proxy { rewrite ^/proxy/([^/]+) $1 break; proxy_pass http://$uri/; } 我对以下1级重定向的尝试是这样的: error_page 301 302 307 =200 @redir; ...并具有此命名位置: location @redir { proxy_pass $proxy_location; } 只有没有$ proxy_location变量,我无法找到创建它的方法。它应包含Location:从上游接收的标头值。 有什么想法吗?
15 nginx 

2
连线uWSGI以在Ubuntu 16.04上使用Django和Nginx
我试图按照本教程设置uWSGI有Django和nginx上Ubuntu16.04。 一切正常,直到我尝试执行此命令的最后一步(哦,具有讽刺意味的...): sudo service uwsgi start 如果失败并出现以下错误: 无法启动uwsgi.service:找不到单元uwsgi.service。 其他人似乎也遇到类似的错误: 无法启动uwsgi.service:单元uwsgi.service无法加载:没有这样的文件或目录。 该问题似乎与Ubuntu版本有关。虽然该教程针对的是Ubuntu 14.04,但它似乎不适用于较新的版本,因为在版本15中,Ubuntu从upstartinit守护程序切换到了systemdinit守护程序。 如何使用systemd启动uWSGI,使其与nginx和Django兼容?
14 ubuntu  nginx  django  uwsgi  wsgi 

5
如何告诉Nginx在提供资产之前等待几秒钟?
因此,当我在正在编写的应用程序中本地测试诸如Ajax之类的东西时,我经常想使用sleep语句在服务器端脚本中添加延迟。它有助于模拟慢速连接等。 有没有一种方法可以直接在Nginx配置中指定类似的延迟行为,该行为将对其所服务的纯HTML文件起作用? 我知道您可以在网络级别上进行类似的延迟仿真(请参阅此处),但看起来很混乱,而且对我而言从来没有做得很好。
14 nginx 

4
测试是否设置了nginx变量
我需要将变量设置为默认值(如果尚未设置)。以下配置可以完成这项工作: if ($foo ~ "^$") { set $foo default-value; } 但是它会生成运行时警告: 使用未初始化的“ foo”变量 有没有一种方法可以测试是否设置了变量而不生成警告,也没有通过以下方式全局关闭警告: uninitialized_variable_warn off;
14 nginx 

3
这是否证明了网络带宽瓶颈?
我错误地认为我的内部AB测试意味着我的服务器每秒可以处理1k并发@ 3k点击。 目前,我的理论是网络是瓶颈。服务器无法足够快地发送足够的数据。 来自blitz.io的并发率为1k的外部测试显示,我的命中率上限为180,由于服务器每秒只能返回180,因此页面的响应时间越来越长。 我已经从nginx提供了一个空白文件,并进行了替换:它并发地按1:1比例缩放。 现在要排除IO / memcached瓶颈(nginx通常从memcached中提取),我提供了文件系统中缓存页面的静态版本。 结果与我的原始测试非常相似;我的上限是180 RPS。 将HTML页面分成两半,可使我的RPS翻倍,因此,它肯定受页面大小的限制。 如果从本地服务器内部内部使用ApacheBench,则在高传输速率下,整页和半页上都可以获得大约4k RPS的一致结果。传输速率:接收到62586.14 [Kbytes / sec] 如果我从外部服务器进行注册,我将获得180RPS的收益-与blitz.io结果相同。 我怎么知道这不是故意的节流? 如果我从多个外部服务器进行基准测试,那么所有结果都会变差,这使我相信问题出在我的服务器出站流量,而不是基准服务器/ blitz.io的下载速度问题。 所以我回到我的结论:我的服务器不能足够快地发送数据。 我对吗?还有其他方法可以解释这些数据吗?解决方案/优化是否设置了多个服务器+负载平衡,每个服务器每秒可以处理180次匹配? 我对服务器优化还很陌生,因此感谢您对这些数据进行解释的确认。 出站流量 以下是有关出站带宽的更多信息:网络图显示最大输出为16 Mb / s:每秒16兆位。听起来一点也不。 由于有节流的建议,我对此进行了调查,发现linode的上限为50mbps(显然,我甚至还没有达到这个上限)。我把它提高到了100mbps。 由于linode限制了我的访问量,而我什至没有实现,这是否意味着我的服务器确实应该能够输出高达100mbps的数据,但受到其他内部瓶颈的限制?我只是不了解如此大规模的网络是如何工作的。它们可以像从HDD读取数据一样快速地发送数据吗?网络管道有那么大吗? 结论 1:基于以上所述,我认为我可以通过在多nginx服务器设置之上添加nginx负载平衡器来提高我的180RPS,使LB后的每台服务器恰好为180RPS。 2:如果linode的限制是50 / 100mbit,而我完全没有达到,则必须做一些事情才能通过单服务器设置达到该限制。如果我可以在本地足够快地读取/传输数据,并且linode甚至不愿意设置50mbit / 100mbit的上限,则必须存在一个内部瓶颈,该瓶颈使我无法确定那些不知道如何检测的上限。正确? 我知道这个问题现在很大而且很模糊,但是我不确定如何浓缩。我做出的任何结论都值得您的任何投入。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.