我试图通过安全的nginxredirectWeb服务化石scm。 但是我不知道什么是正确的设置以及如何检查错误日志。 我希望通过这个设置我可以使用 https://test.example.com/fossil/a/b/c 代替 http://test.example.com:8888/a/b/c 错误消息显示“找不到页面”。 这是我的nginx设置文件。 upstream fossil_server { server localhost:8888 fail_timeout=0 } server { listen 80; server_name test.example.com; return 301 https://$server_name$request_uri; } server { listen 443 default ssl; server_name test.example.com; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; add_header Strict-Transport-Security max-age=63072000; add_header X-Frame-Options […]
我在nginx中build立了一个非常基本的代理规则。 但是,请求被代理的资源会执行引用程序检查。 它必须是服务运行在同一个域。 因此我需要改变引用者。 我尝试了一个proxy_set_header,但似乎没有工作。 我错过了什么或有没有其他的方式来做到这一点? location /api/v1/ { proxy_pass http://192.168.10.10:8080; proxy_set_header Referer "http://192.168.10.10"; }
我正尝试将mywebsite.com/some-directoryredirect到除mywebsite.com根之外的其他目录。 我使用了以下configuration: server { server_name mywebsite.com www.mywebsite.com; listen 80; root /path/to/the/root/directory/of/mywebsite; index index.php index.html index.htm get.html ; ssl on; listen 443 ssl; ssl_certificate my_ssl.crt; ssl_certificate_key my_key.key; location /some-directory { root /path/to/directory; } } 该configuration加载html文件,但不加载相同目录中的资产。 我发现了一个类似的问题 (或者可能是确切的问题),但问题是不同的。 我能够自己解决这个问题。 我也尝试使用上面的答案build议的别名; 但徒劳无益。 我的/path/to/directory/有some-directory ,nginx服务的index.html文件就好了。 当HTML文件尝试访问/path/to/directory/some-directory的文件(或文件夹)时,会发生此问题。 他们都返回404未find。 我可能做错了什么?
我在我的网站上使用这个标题的HSTS: Strict-Transport-Security: max-age=15768000; includeSubDomains 这按预期工作并强制浏览器将所有http连接redirect到https。 在https://tools.ietf.org/html/rfc6797#section-6.1.2的文档中,我没有find排除指定子域的方法! 我已经尝试为子域添加max-age=0 ,但不覆盖includeSubDomains 是否可以从includeSubDomains规则中排除子域名? 或者是删除这个规则的唯一方法,只是使用一些网站的HSTS头? PS:我的networking服务器是NGINX,我用firefox和chrometesting了这个行为。
编辑新的问题: NGINX可以检查TLS请求寻找SNI像HAProxy(等)吗? 根据我所读到的(据我所知),NGINX不应该支持SNI,我应该为HAProxyselectSSL透明的反向代理。 精细。 但是, 这似乎表明NGINX实际上支持SNI,但我无法find一个有用的文件。 也就是说,我能够find的所有东西都意味着我仍然必须向NGINX提供证书,以便能够匹配请求的主机名。 但是,这不就是SNI试图解决的问题吗? 现在,我开始在相同的IP地址上运行大量不同的HTTPS站点,因为在许多不同的configuration中维护相同的信息时,会花费很多代价,所以我想知道我是否更好开槽NGINX,并学习另一个软件(又名HAProxy),或者如果我真的可以坚持NGINX – 以及如何。 理想情况下,我希望代理为encryptionstream量提供一种透明的隧道,只有客户端和后端服务器(比如Apache或者其他正在运行的应用程序)应该能够解密它 – 这意味着我不必将证书信息保留在反向代理的configuration中。 这意味着我可以从这里走 server { listen 443 default ssl; server_name example.org; add_header X-Clacks-Overhead "GNU Terry Pratchett"; ssl on; ssl_certificate /etc/le_certs/example.org/live/example.org/fullchain.pem; ssl_certificate_key /etc/le_certs/example.org/live/example.org/privkey.pem; location / { proxy_pass_header Server; proxy_set_header Host $host; 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_pass https://exampleapp; } } […]
我试图将我的节点代理从端口8080移动到80并打墙。 我希望我的RESTful API在位于/api/path上的端口80上监听nginx反向代理。 ( 8080端口对于一些企业用户而言是无法访问的)。 我用来将请求指向https://domain.tld:8080 /到http:// localhost:1337 。 没有问题通过: server { listen 8080; server_name domain.tld; ssl on; #some other SSL config removed for clarity location / { proxy_redirect off; proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Scheme $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_connect_timeout 5; proxy_read_timeout 240; proxy_intercept_errors on; proxy_pass http://127.0.0.1:1337; […]
我有以下服务器configuration: server { listen 80; server_name default; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name default; root /home/forge/default/public; … and so it continues 我也有两个域名, test.com和example.com 。 他们都指向服务器的IP地址。 如果我去test.com ,它会被redirect到https,但是如果我去了example.com ,它会被redirect到test.com的https版本,而不是https的https版本。 为什么会这样呢? 我很新的服务器configuration。 在其他服务器故障的答案我只发现使用$hostvariables,但似乎并没有工作。
有点卡在这里。 我想要一个漂亮简单的Nginx“include”代码片段,它需要HTTP AUTH来包含它所在的位置,并强制redirect到HTTPS(如果还没有的话)。 我想出了这个: # /etc/nginx/snippets/requirelogin-staff.conf if ($https != "on") { return 301 https://$server_name$request_uri; } auth_ldap "Login Required"; auth_ldap_servers staff; 并像这样使用它(愚蠢的例子为了简洁起见,现实世界中我们有django服务/和/静态/作为资源文件的快捷方式): location / { include snippets/requirelogin-staff.conf; try_files $uri $uri/index.html $uri.html =404; location /static { alias /var/www/webroot/liv/static; } } 它适用于任何由位置/ wget -S显示它首先发出301redirect到相同的URL,但与https协议。 然后它回来了一个401正确。 问题是/静态下的URL auth通过指令inheritance踢进来。 但是,似乎“if($ https!=”on“)…”没有被inheritance到嵌套的位置块中。 所以wget -S会直接进入401,邀请用户使用不安全的连接login,这当然是一件坏事。 我可以看看为什么“如果”有问题(try_files不会inheritance)。 但是,这让我颇为困惑。 任何一种灵魂都可能提出一种更清洁的方法吗 一个原则是(理想情况下)我希望AUTH在一个或多个位置被一条整齐的单行“包含”所需,以避免错误。 inheritance将是很好的 – 再次避免错误。 […]
我有一台服务器设置了一些NAT后面的虚拟机。 我想为我的xmpp-server-vm使用encryption,因此在vm中需要一个证书。 是否有可能使用nginx作为一个反向代理,所以我可以运行letsencrypt并获取/更新vm与xmpp服务器上的证书,并保持在该机器上的私钥? 我不能使用nginx作为TLS终止代理,因为我的vm不应该访问自己的反向代理,这是需要的,因为xmpp软件需要访问密钥。 编辑: 我做了一个我想要做的示意图: 我的基本问题是,我不知道letsencrypt是否启用了服务器名称指示的反向代理后面,所以我可以在我的xmpp-server-vm中获得一个证书来encryptionxmppstream量。
我们公司的Web应用程序使用客户端证书进行身份validation。 我们希望添加一些iPad客户端到库存盘点等等。客户端证书身份validation在桌面浏览器中工作得很好,但是当我们使用完全相同的证书在iPad上的桌面浏览器中工作时,我们得到这个错误nginx的: 7200#7200: *2 client SSL certificate verify error: (26:unsupported certificate purpose) while reading client request headers Nginx向iPad客户端返回一个400错误的请求“The SSL Certificate Error”。 CA公共证书和中级CA证书安装在iPad上,并安装在服务器上。 再次,我们的设置,客户端证书身份validation对桌面浏览器正常工作。 这是iPad问题,nginx问题还是证书问题? 我们如何解决和解决它? 更新更多的信息 : openssl x509 -purpose用于创buildpkcs文件的证书是: Certificate purposes: SSL client : Yes SSL client CA : No SSL server : Yes SSL server CA : No Netscape SSL server : Yes […]