Questions tagged «nginx»

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

2
在Nginx中的位置下服务多个代理端点
我有几个API端点,我想从一个位置提供服务,/api并且子路径将传递到不同的端点。具体来说,我希望可以在以下位置使用webdis并在上使用/api专有的API /api/mypath。 我不担心与webdis API发生冲突,因为我使用的子路径不太可能与redis命令名称发生冲突,并且对API的设计有完全的控制权以避免冲突。 这是我一直在使用的测试服务器上的配置文件: server { listen 80; server_name localhost; server_name 192.168.3.90; server_name 127.0.0.1; location / { root /home/me/src/phoenix/ui; index index.html; } # temporary hardcoded workaround location = /api/mypath/about { proxy_pass http://localhost:3936/v1/about; } location /api { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://localhost:7379/; } # tried this but it gives …

2
您可以在多个Nginx配置文件中定义服务器的位置吗?
我在同一主机上运行多个ruby应用程序: ~/app1 ~/app2 ~/app3 我想让nginx使用以下子目录代理这些应用程序: http://example.com/app1 http://example.com/app2 http://example.com/app3 我很好奇nginx是否支持我能够在多个文件中定义这些位置,以便我可以与应用程序一起保留每个配置,而不是为所有应用程序使用一个整体配置文件: ~/app1/nginx.conf ~/app2/nginx.conf ~/app3/nginx.conf 我在3个配置文件中的每个配置文件中使用单个location指令定义服务器的幼稚尝试导致conflicting server name "example.com" on [::]:80, ignored了如下配置: upstream app1 { server 127.0.0.1:4567; } server { listen [::]:80; listen 80; servername example.com location /app1 { proxy_pass http://app1; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header …
14 nginx 

1
Nginx仅在特定位置验证客户端证书
我们使用Nginx作为Web应用程序服务器的反向代理。Nginx处理我们的SSL等,但否则仅充当反向代理。 我们想要要求有效的客户证书,/jsonrpc但在其他任何地方都不需要。我们发现的最好方法是 server { listen *:443 ssl; ssl on; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_client_certificate /etc/nginx/client-ca.crt; ssl_verify_client optional; location /jsonrpc { if ($ssl_client_verify != "SUCCESS") { return 403; } proxy_pass http://localhost:8282/jsonrpc-api; proxy_read_timeout 90; proxy_redirect http://localhost/ $scheme://$host:$server_port/; } } 这对于大多数浏览器都可以正常工作,但是某些浏览器(例如Safari和Android上的Chrome浏览器)最终会提示用户提供客户端证书,无论它们在网站上的哪个位置。 我们如何让Nginx接受但并不真正在乎我们/jsonrpc所在地以外的所有地方的客户证书?

4
使用nginx从URL中删除尾部斜杠
我希望我的网站上的以下URL是等效的: /foo/bar /foo/bar/ /foo/bar/index.html 此外,我希望后两种形式向第一种形式发出HTTP 301重定向。我只是在提供静态页面,它们是按照第三种形式排列的。(换句话说,当用户请求时,/foo/bar他们应在处接收文件/usr/share/.../foo/bar/index.html)。 我的nginx.conf当前包含以下内容: rewrite ^(.+)/$ $1 permanent; index index.html; try_files $uri $uri/index.html =404; 这适用于的请求/foo/bar/index.html,但是当我的请求/foo/bar或/foo/bar/Safari告诉我“发生了太多重定向”时,我认为存在无限的重定向循环或类似的循环。如何获取nginx以上述方式将URL映射到文件? 编辑:我的完整配置 这是我的全部nginx.conf,我的域名替换为“ example.com”。 user www-data; worker_processes 1; pid /run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; server_names_hash_bucket_size 64; include /etc/nginx/mime.types; …
14 nginx 

5
子网域的Nginx伺服器名称冲突
我目前在Nginx上为foo.domain.com运行了一个虚拟主机,一切正常。 我为要添加的新子域创建了一个名为bar.domain.com的新文件。我对两者使用相同的设置。 重新启动Nginx时,我得到 Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx. 当我访问bar.domain.com时,我会看到应该看到的内容,但是当我访问foo.domain.com时,我看到了bar.domain.com链接到的页面。 oo upstream php-handler { server unix:/var/run/php5-fpm.sock; } server { listen 80; server_name foo.domain.com; return 301 https://$server_name$request_uri; } server { listen 443; ssl on; ssl_certificate [path_foo]/cacert.pem; ssl_certificate_key [path_foo]/privkey.pem; root [path]/foo; ... } 酒吧 server { …
14 nginx  ssl  virtualhost 

4
如何将Nginx数据复制到两个服务器?
我正在尝试将一台特定Nginx服务器收到的流量复制到两台服务器。目标不是负载均衡,而是在所有nginx服务器上重放相同的输入。 一个示例:Nginx接收HTTP POST。我想将此相同的POST发送到其他服务器。 **更新** 这种情况既简单又复杂。我只需要将POST数据(或GET或任何请求数据)重新发送到另一个服务器IP(它也运行nginx实例)。只是它。 用户-> POST数据-> NGINX实例----重定向--->服务器1和服务器2
14 nginx  ab 

2
如何根据Nginx中的子域将代理反向到不同的地方?
我有多个子域,都指向一台计算机和一个IP地址。在这台机器上,我想让nginx充当反向代理,并且我希望它使用哪个子域来访问该机器,然后将其反向代理到其他服务器。我所见过的使用nginx作为反向代理的所有示例都使用location,但是据我了解,这仅适用于路径,不适用于不同的子域。我怎样才能实现自己想要的?

5
Nginx代理到具有SSL客户端证书身份验证的后端
我有两个服务器,两个都有nginx。服务器A正在侦听443,并且配置为使用客户端SSL证书进行身份验证。 服务器B有一个内部进程,需要通过nginx与服务器A进行通信。 我想在服务器B上配置Nginx,该服务器将侦听8080(不加密,因为它全部是本地通信),并将proxy_pass传递到ServerA:443。 问题是如何注入客户证书?我没有找到可以做到这一点的proxy_xxxx函数。 我确实知道如何使socat与之等效,但是我的要求是使用nginx。

2
为什么nginx server_name指令的最大长度为14个字符?
我有以下虚拟主机 server { server_name abc.example.com; root /var/www/test/; index index.html; } 运行时nginx -s reload,出现以下错误: nginx:[emerg]无法构建server_names_hash,应增加server_names_hash_bucket_size:32 具有15个或更多字符的任何server_name也会发生同样的情况。 如果我将server_name设置为ab.example.com(或15个字符以下的任何名称),该问题就会停止显现。 为了解决这个问题,我添加了以下内容/etc/nginx/nginx.conf(之前未定义): server_names_hash_bucket_size 64; 将其设置为33也可以,但不是32。 为什么server_name的默认最大长度为14个字符? 此限制是由nginx的默认设置还是由其运行的系统施加的? server_name 15如何影响最大哈希存储桶大小?(系统上仅定义了4个虚拟主机)

1
通过HTTP标头将SSL协议信息传递到后端
在最近发现Poodle漏洞之后,我们的团队决定从SSLv3继续。但彻底清除之前,他们要提醒的日常用户,他们的浏览器使用过时的SSLv3。因此,我们想到了 从前端SSL卸载检测协议(SSLv3,TLS1等)(我们使用nginx) 通过HTTP标头将该信息(SSL协议)传递给Apache后端。 然后,我们的后端代码将处理该标头,并在客户端使用SSLv3时发出警告。 我知道nginx具有功能proxy_set_header。所以这个简单 proxy_set_header X-HTTPS-Protocol $something; 现在,问题是:很明显nginx知道客户端使用的协议,但是如何通过HTTP头将信息传递给后端呢? 谢谢 正如类似的线程Apache重定向用户所指出的,如果他们使用的是SSLv3,则这种想法可能会变得非常糟糕。 原因是TLS握手发生在通过TLS隧道发送HTTP通信之前。当我们的后端检测到SSL协议时,客户端可能已经在他的第一个请求中发送了私有数据。对于永久和长期的解决方案,我们应考虑禁用SSLv3。
13 nginx  ssl  poodle 

3
如何在NGINX PageSpeed模块资源上启用gzip压缩?
我一直致力于优化某个网站,以使其在Google PageSpeed Insights工具(针对移动设备和台式机)上获得100分。大多数项目都可以正常工作,但是我仍然收到该网站的“启用压缩”警告。 这很麻烦,因为在我的服务器上启用了gzip,并且唯一未压缩的资源来自NGINX PageSpeed模块。我已经浏览了Google网站上的配置页面,但是除了已经存在的常规NGINX配置之外,没有任何内容描述如何启用压缩。 我的问题是:如何启用gzip压缩使其适用于pagespeed资源? 我的服务器设置: Ubuntu 12.0.4.3 LTS NGINX-使用PageSpeed模块1.6.29.5 beta进行自定义编译1.5.4 NGINX服务器配置: user www-data; #set worker processes to cpu processes worker_processes 4; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { client_max_body_size 200m; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 3; types_hash_max_size 2048; gzip on; …

1
使用Nginx将子路径重定向到外部主机
我需要在Nginx中创建一个非常简单的映射,将子路径重定向到位于同一子网中的另一台服务器。 Nginx服务器:192.168.0.2 Tomcat服务器:192.168.0.3:8443 我试图把它放在服务器部分 location /tomcatapi/ { rewrite /tomcatapi/(.*) $1 break; proxy_pass http://192.168.0.3:8443; } 但是我只能访问http://www.myservice.com/tomcatapi/的页面是一个500错误页面,在nginx日志文件中,我遇到以下错误: the rewritten URI has a zero length 我在这个会议上缺少什么?


2
Nginx重写或内部重定向周期
我将头顶在一张桌子上,试图弄清是什么原因导致尝试访问不存在的URL时,nginx配置中的重定向循环。配置如下: server { listen 127.0.0.1:8080; server_name .somedomain.com; root /var/www/somedomain.com; access_log /var/log/nginx/somedomain.com-access.nginx.log; error_log /var/log/nginx/somedomain.com-error.nginx.log debug; location ~* \.php.$ { # Proxy all requests with an URI ending with .php* # (includes PHP, PHP3, PHP4, PHP5...) include /etc/nginx/fastcgi.conf; } # all other files location / { root /var/www/somedomain.com; try_files $uri $uri/ ; …
13 nginx 

1
尝试访问我的简单测试页面时禁止使用403
我刚刚安装了nginx,并且正在尝试设置我的第一个站点。我正在尝试将nginx与php-fpm一起使用。已安装nginx(当我转到ip时,将获得默认的欢迎使用nginx页面)。 现在,我正在尝试运行一个简单的脚本: <?php phpinfo(); 但我一直打到403禁止页面。在我的虚拟主机的日志中,我可以看到很多行,例如: 2012/05/18 01:29:45 [error] 4272#0: *1 access forbidden by rule, client: x.170.147.49, server: example.com, request: "GET / HTTP/1.1", host: "example.com" 该文件是/srv/www/test/index.phpnginx的所有者(我777尝试将包括文件在内的完整路径都删除了)。 我已经检查过nginx确实确实nginx/nginx在配置中的用户和组下运行。在nginx.conf中,我更改了默认配置包含路径,以确保没有其他配置挡住(include /etc/nginx/sites-enabled/)。 我正在使用的配置看起来像(如果您需要其他配置(php-fpm / nginx.conf),请告诉我): server { listen 80; server_name example.com; root /srv/www/test; access_log /var/log/nginx/example-access.log; error_log /var/log/nginx/example-error.log error; location ~ /. { access_log off; log_not_found …
13 nginx 

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.