Articles of nginx

如何正确拒绝ssl连接到没有证书的子域

我目前第一次用nginx设置了一个(半认真的)服务器。 我有几个域名和子域名,并希望尽可能使用SSL,以保持来自我的网站的stream量合理安全。 最近遇到的一个问题是,我发现自己无法正确处理SSL请求到不存在通配符证书的不存在的子域。 基本上,我的设置非常接近这个 (nginx,redirect到https,多个子域名,让我们encryption所有有效的子域名的证书,全无形的域名)。 这是真正的NotNice™,错误input一个子域名的用户将会遇到“这个连接不可信任”的错误(或者更糟,取决于浏览器)。 这可能会破坏我的网站的信任。 例如https://www.my-domain.com作品,但https://ww.my-domain.com会告诉用户我的网站不被信任。 由于我期望有相当数量的读者不是精通技术,所以我不能指望他们自己理解或诊断。 所以我想要的是,当有人访问一个不存在的子域名时,基本上只是中止连接,这样他们会得到一个“连接被拒绝”的错误,而不是“这个网站是邪恶的,你可能会被黑客攻击”的错误。 这不仅更接近事实(这个网站是可以信任的,那里什么也没有),也可能帮助他们发现错误,因为它指出地址是错的,而不是证书。 事实上,这就是我为非SSL连接所做的。 我在nginx中有一个catchall服务器伪指令,它只返回404端口80上的任何内容,并且与已知的子域不匹配。 那么我怎么才能在nginx中拒绝ssl连接呢? 我知道我不能使用HTTP返回码,因为在这种情况下,首先没有连接。 这是ssl的重点。 我不能使用通配符证书,因为它们太昂贵了。 我想避免接触iptables,因为当我更改子域名时,这很难保持。 但是,如果这是最好的解决scheme,我可以研究它。 有没有聪明的DNS条目可以帮助?

不能与nginx一起使用websocket

我使用Activemq作为代理,客户端是Paho js发送websocket请求(ws协议)。 一切工作正常在服务器上,但是当服务器开始将nginx设置为代理时,客户端无法连接到服务器(但我可以连接到Activemq UI Web)。 我的nginx设置是: map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 16614; server_name mq.mysite.com; access_log /var/log/docker/nginx/access_activemq.log activemq_custom; location / { proxy_pass http://192.168.10.13:16614; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } 我正在使用80端口来侦听ActiveMQ的webUI和16614到ws协议。 有什么缺失的步骤?

谷歌负载平衡+ Nginx的+ symfony2

我试图configuration一个可扩展的symfony2应用程序,所以我读这个页面https://cloud.google.com/compute/docs/load-balancing/http/cross-region-example 我做了他们所说的所有事情,正在使用一个简单的nginx conf: server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; # Uncomment to enable […]

反向代理背后的OpenStack Horizo​​n(首选nginx)

现在的情况: 我有一个Triple-O OpenStack安装(Liberty),甚至连“公共”networking都在私有环境(10.24.7.0/24networking)中。 访问该networking的唯一方法是通过网关主机。 我希望使用反向代理从互联网访问Horizo​​n。 由于安全问题,所有外部通信应通过HTTPS进行encryption。 反向代理应该用作SSL终止主机,并且所有内部通信应该是未encryption的。 OpenStack部署未configuration为使用SSL / TLS,并不知道“公共”networking并非真正公开。 我目前正在尝试使用Nginx作为反向代理,但如果他们提供了解决我的问题的方法,也可以使用其他反向代理软件。 网关主机正在运行RHEL 7.2,Nginx从官方的Nginx仓库安装在版本1.11.1(主线)上。 gateway.example.com是示例中使用的FQDN, 1.2.3.4是示例中使用的网关主机的外部IP地址 10.24.7.9是Triple-O安装的“公共”端点 到目前为止工作: http://gateway.example.com加载index.html,其中可以下载用于签署服务器证书的CA的证书。 由于OpenStack安装不知道它是在SSL端点后面,所以我必须重写内容中的链接。 这是通过两个sub_filter指令完成的,一个是通用的( sub_filter 'http://$host' 'https://$host'; ),另一个replaceOpenStack端点IP( sub_filter 'http://10.24.7.9' 'https://$host'; ) Horizo​​n的consolefunction允许用户通过embedded在Horizo​​n中的NoVNC连接到实例的串行控制台。 NoVNC使用websocket在浏览器和运行实例的物理主机之间build立一个双向的TCP连接。 为了支持这一点,我不得不configurationNginx来允许HTTP连接升级,并听取端口6080。 iptables允许端口80,443和6080的stream量。 问题: 在Horizo​​n页面上显示实例的详细信息,而不是显示选项卡的主体(概述,日志,控制台,操作日志),选项卡行将重复,只显示概览选项卡的内容。 与实例的控制台的连接失败,错误1006.(获取控制台在其自己的浏览器选项卡中显示的所需URL使用nova get-vnc-console <ID> novnc并用FQDNreplace端点IP)。怀疑这个错误是由于从HTTP1.1升级到websocket标准的连接包含关于不能直接从浏览器访问的“公共”接口或NoVNC软件拒绝连接的信息到configuration的服务器地址/主机名(“公共”)与请求中的地址(代理名称/ IP)之间不匹配。 这些都是猜测。 Nginx的configuration文件 ssl_certificate /etc/nginx/certs/gateway.example.com.crt; ssl_certificate_key /etc/nginx/certs/gateway.example.com.key; ssl_dhparam /etc/nginx/certs/dh.pem; ssl_protocols TLSv1.2 TLSv1.1; ssl_ciphers AES256+EECDH:AES128+EECDH:!aNULL:!eNULL:!ECDSA:!SHA:!DSS; ssl_prefer_server_ciphers on; ssl_session_cache […]

当旧式服务器也有404时,在Nginx中返回原始的404响应

我有这个Nginxconfiguration大多数工作,我想要的方式,它: 试图从节点获取页面, 如果存在404,则尝试从不同主机上的旧版网站获取页面 如果网站的旧版本返回404,则显示来自新网站(而不是旧网站的404页面)的404页面。 注意:这是一个envsubst模板。 location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_read_timeout 60; proxy_next_upstream error timeout http_500 http_502 http_503 http_504; proxy_buffers 16 64k; proxy_buffer_size 2k; proxy_temp_file_write_size 64k; proxy_pass http://nodejs; proxy_intercept_errors on; recursive_error_pages on; error_page 404 = @legacy; location /404 { # serve up /404 […]

如何使用nginx和proxy_pass为每个创build子域

我目前有我的服务器在my.server.com nginx设置。 使用当前configuration,我使用http://my.server.com/app1或http://my.server.com/app2访问不同的应用程序。 我有一个apps.conf放置在/etc/nginx/sites-enabled/是这样的: upstream app1_servers { server 172.12.11.10:8080; } upstream app2_servers{ server 172.12.11.10:9090; } server { listen 80; server_name my.server.com; return 301 https://my.server.com/$request_uri; #force https } server { listen 443; ssl on; ssl_certificate /etc/ssl/my.server.com/cert.pem; ssl_certificate_key /etc/ssl/my.server.com/priv.pem; server_name my.server.com; location /app1 { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Proto https; proxy_pass […]

如何诊断网站的可访问性问题?

所以我有一个网站, juerix.com 。 我一直抱怨一些移动用户无法访问该网站。 我检查了nginx访问日志文件,它看起来像是正确响应。 我尝试自己访问网站,并按预期工作。 我如何诊断这个问题? 错误日志文件是空的。 我问用户是否可以访问其他网站,他们可以不是互联网问题。 我的网站使用websockets,如果这有所作为。 我知道这是一个超级普遍的问题,为什么会出现这种情况? 我想知道我可以采取的步骤,( 理想情况下,无需访问设备有问题,理想情况下,但如果需要的话,则需要 )来找出问题。

如何将Nginx位置重写为Apache

我有一个使用nginx运行的网站,但现在它是apache我试图将nginx转换为apache,并没有成功 这是我想转换为Apache的nginx文件: server { listen 80; listen 443 ssl http2; include ssl.conf; include upload2.conf; ssl_certificate /srv/config/ssl/wrx.org-combined.crt; ssl_certificate_key /srv/config/ssl/wrx.org.key; ssl_trusted_certificate /srv/config/ssl/_bundle_digicert_ev.crt; server_name wrx wrx.* .wrx.org; root /srv/sites/wrx/web; if ($http_host = www.wrx.org) { rewrite ^ $scheme://wrx.org$request_uri permanent; } include debug.conf; include robots.conf; location /api { try_files $uri @api; } location /give { try_files $uri @api; } location […]

通配符证书和多域证书之间的区别

我有一个支持以下types的域的多域名证书 abc.myComany.com 123.myCompany.com xyz.myCompany.com 我现在需要它来支持mysubdomain.myComany.com从阅读各种网上post,似乎我需要一个通配符证书为"*.myComapny.com"但如果这不是一个可能性,我可以添加mysubdomain.myCompany.com作为另一个支持的域到多域名证书? 这会工作吗?

Nginx偶尔停顿

一天几次我们的nginx(1.1.19 Ubuntu 12.04 lts)停顿几秒钟(目前最长的时间是53秒),并等待提供数据。 客户端没有错误,请求只需要拖延时间。 这适用于在这段时间内的所有请求(cgi或状态模块),所有请求将在失速结束后立即提供。 我在服务器上有一个屏幕会话,并每秒钟curl状态页面: {"time":"2016-09-02T10:10:21+02:00","host":"app1","data":"nginx","reading":1,"writing":4,"waiting":0} {"time":"2016-09-02T10:10:22+02:00","host":"app1","data":"nginx","reading":1,"writing":4,"waiting":0} {"time":"2016-09-02T10:10:50+02:00","host":"app1","data":"nginx","reading":3,"writing":9,"waiting":0} {"time":"2016-09-02T10:11:43+02:00","host":"app1","data":"nginx","reading":5,"writing":98,"waiting":0} {"time":"2016-09-02T10:11:44+02:00","host":"app1","data":"nginx","reading":0,"writing":25,"waiting":0} {"time":"2016-09-02T10:11:45+02:00","host":"app1","data":"nginx","reading":3,"writing":7,"waiting":0} 差距不是由于错误,而是要求有比正常更长的外部持续时间。 在访问日志中没有logging错误的请求。 你可以注意到差距。 127.0.0.1 – – [02/Sep/2016:10:10:17 +0200] "GET /basic_status HTTP/1.1" 200 121 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" 127.0.0.1 – – [02/Sep/2016:10:10:18 +0200] "GET /basic_status HTTP/1.1" 200 121 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" 127.0.0.1 – – […]