以下规则重复了proxy指令,我宁愿只提及一次: location /view/ { # Duplicated! proxy_pass http://127.0.0.1:9292; proxy_set_header Host $host; } location /api/ { # Duplicated! proxy_pass http://127.0.0.1:9292; proxy_set_header Host $host; auth_basic "esqulino Testbetrieb"; auth_basic_user_file /srv/svn/users.conf; } 那么我在这里提到的位置有更多的位置,所以全局指定proxy指令不是一个选项。 我天真的做法是简单地用正则expression式扩展第一个位置,在那里提到代理,然后只指定API的auth部分: location ~ /(api|view)/ { proxy_pass http://127.0.0.1:9292; proxy_set_header Host $host; } location /api/ { auth_basic "esqulino Testbetrieb"; auth_basic_user_file /srv/svn/users.conf; } 但由于某种原因,这根本不触发authentication。 我怎么能提到proxy (或实际上任何)只有一个位置的指令一次,仍然“超载”一些更具体的地点,像auth_basic额外的指令?
我在Ubuntu Server 14.04上有最新的nginx版本。 我主持了一些域名,现在我正在尝试在所有域名上实现letsencrypt。 我已经有一个带有comodo证书的域名,我们称之为domainone.com ,工作得很好。 我已经build立了第二个域名, domaintwo.com“` with letsencrypt, but when I try to access the说domaintwo.com“` with letsencrypt, but when I try to access the via HTTPS I get the content from domaintwo.com“` with letsencrypt, but when I try to access the domaintwo.com时via HTTPS I get the content from domainone.com` via HTTPS I get […]
我在centos 7上运行nginx,而/etc/nginx/nginx.conf包含一个指令,包含来自conf.d所有configuration文件。 我有一个单独的myapp.conf文件,上游监听一个域套接字(一个Puma服务器,如果相关的话)。 但是,nginx只是忽略它。 没有错误,例如can't connect to upstream 。 相反,nginx会尝试从默认位置提供文件: /usr/share/niginx/html 。 所以,我想在包含所有文件之后看到最后的nginx.conf ,以确认myapp.conf确实包含在内 (见更新)。 nginx -t不显示任何问题。 /etc/nginx/conf.d/myapp.conf: upstream app { # Path to Puma SOCK file, as defined previously server unix:/home/centos/apps/myapp/shared/tmp/sockets/puma.sock fail_timeout=0; } server { listen 80; server_name localhost; root /home/centos/apps/myapp/shared/public; try_files $uri/index.html $uri @app; location / { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; […]
我把joomla web文件夹复制到从Ubuntu 14.04到Ubuntu 16.04服务器的相同目录。 所有的设置都没有改变。 在确定vhost fastcgi指向php7.0-fpm.sock而不是ubuntu 16.04上的php5.-fpm.sock后,它只显示空白屏幕。 在访问日志上: 192.168.1.10 – – [19/Jul/2016:11:09:45 +0800] "GET / HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0" /etc/nginx/nginx.conf user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 100; multi_accept on; use epoll; } http { client_max_body_size 200M; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout […]
我们正在试验一种RPC服务( linkerd ),它充当我们的微服务之间的粘合剂 – 从本地Consul集群中读取它们的位置。现在,Linkerd希望在传入的请求上看到Host标头,以确定要打哪个服务。 在我们的拓扑结构中,我们有nginx作为边缘运行,然后应该代理到Linkerd,并根据path设置Host头。 所以我们testing的一个简单的configuration看起来像这样; location /api/v1/services/service-x { proxy_set_header Host service-x; proxy_pass http://linkerd:4140; } 这不是什么幻想。 它匹配service-xpath的path,然后尝试proxy_pass这些请求与linkerd所设置的服务名称链接。 我们所看到的是Host头永远不会被设置。 如果我curl -H "Host: service-x" linkerd:4140/some/x/path通过Linkerd访问该服务。 我们应该如何使用nginx为上游设置标题? 还是我在做一些愚蠢的事情? 谢谢!
ServerFault上有很多问题涉及这个问题的一部分,但是我很难将它们拼凑在一起。 我有一个安装了Wildcard SSL证书的新的nginx服务器。 所有的工作正常。 我想创build强制执行以下的redirect规则: 1)必须有www或子域强制执行。 所以,subdomain.domain.com和www.domain.com是好的。 domain.com本身不是,应该自动添加www。 2)HTTPS必须在整个站点执行,而不pipe子域是什么。 换一种说法: ttp://domain.com >> ttps://www.domain.com ttp://subdomain.domain.com >> ttps://subdomain.domain.com ttps://domain.com >> ttps://www.domain.com ttps://subdomain.domain.com(这很好) 根据Nginx的重写陷阱页面和本网站上的其他答案,我一直在使用这个configuration代码: server { listen 80; server_name *.domain.com; return 301 https://$server_name$request_uri; } 以及这个: server { listen 80; server_name ~^(.*)domain\.com; return 301 https://$server_name$request_uri; } 我也尝试使用$ host而不是$ server_name。 所有这些redirecthttp> https就好了,但它总是默认为https://domain.com ,无论子域名还是www。 思考?
是否有可能只是反向代理被褥,而不暴露CouchDB的根和RESTful API? 我有以下的nginxconfiguration: server { # This should never be hit, as the port isn't open, # but it's here for completeness sake listen 80; return 301 https://$host$request_uri; } server { listen 443; server_name my_futon_host; ssl_certificate /path/to/my/certificate.pem; ssl_certificate_key /path/to/my/private.key; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; location / { […]
我试图设置nginx让基于Hadoop的集群的名称节点能够根据url上的文件扩展名有效地redirect到Hadoop周围的不同用户界面。 为了简单起见,这样说 firstnode.com对应于我的集群的主节点 stormnode.com对应于运行风暴的节点,并且可以通过端口8080访问UI。 那么,理想的redirect将是http://firstnode.com/storm – > http://stormnode.com:8080 。 我已经尝试编辑我的Nginxconfiguration文件,以便我最终得到像下面的每一个: server{ listen 80; server_name firstnode.com; location /storm{ proxy_pass secondnode.com:8080; } } 以及 server{ listen 80; server_name firstnode.com; location /storm{ return 301 $scheme://secondnode.com:8080$request_uri; } } 以及使用正则expression式对后者进行的等同声明。 不幸的是,我得到的最接近的是将firstnode.com/stormredirect到secondnode.com:8080/storm。 我将不胜感激关于如何通过nginx的configuration文件重写URL而不传递文件扩展名/path(又名/风暴)到新的URL 。
我一直在运行我的Nginx Web服务器近一个星期,突然之间,它开始抛出这个错误(只使用HTTPS)并redirect到/defaultsite当使用HTTP。 网站链接是https://leakkiller.com ,如果你想看看自己发生了什么。 我已经尝试清除浏览器caching。 我的doamin注册商是1&1(我生命中最大的错误),但我使用数字海洋的VPS,所以我路由我的DNS通过他们。 下面你可以find我的服务器块为Nginx。 server { listen 80 default_server; listen [::]:80 default_server; server_name leakkiller.com www.leakkiller.com; return 301 https://$host$request_uri; } server { listen 443 ssl; listen [::]:80 ssl ipv6only=on; ssl_certificate /etc/letsencrypt/live/leakkiller.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/leakkiller.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security […]
这应该是一个简单的问题,但我不能得到它的工作…基本上我有一个客户,设置他们的域名test.customer.com通过CNAME指向customer.product.com 。 我有nginx规则listen 80 default_server; 和proxy_set_header Host $host; 将主机转发到nginx后面的Node.js服务器。 但是,当我去test.customer.com我可以在应用程序中看到主机设置为product.com 。 所以基本上我不能看到主机的请求来自于代码… 这怎么可能,为什么不是设置为customer.product.com (这是我所需要的)? 我错过了什么? 编辑:这是我的nginxconfiguration捕捉该请求: server { listen 80 default_server; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:3000; } }