我们需要在 Apache 反向代理上设置安全证书。我们被告知需要使用虚拟主机指令。
我在 O'Reilly 的书中查找过这些内容,但找不到任何专门使用 https 的示例。
有谁有任何配置片段的示例来执行此操作?
我设法在我的服务器上使用 Apache 前端设置 Gitlab。由于默认的 SSL 端口已被占用,我添加了一个
Listen 444
Run Code Online (Sandbox Code Playgroud)
到 Apache 端口和 VirtualHost 之类
<VirtualHost *:444>
ServerSignature Off
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXP:!eNULL:!aNULL:RC4+RSA:+HIGH:-MEDIUM:!LOW:-SSLv2
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://unicornservers%{REQUEST_URI} [P,QSA,L]
ProxyPreserveHost On
ProxyPass /uploads !
ProxyPass /error !
<Proxy balancer://unicornservers>
BalancerMember http://127.0.0.1:8081
ProxyPassReverse https://my.server.de:444/
</Proxy>
# needed for downloading attachments
DocumentRoot /home/git/gitlab/public
<Location />
Order deny,allow
Allow from all
</Location>
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
ErrorLog /var/log/apache2/gitlab.error.log
CustomLog /var/log/apache2/gitlab.forwarded.log common_forwarded
CustomLog /var/log/apache2/gitlab.access.log …Run Code Online (Sandbox Code Playgroud) 我有以下 Nginx 服务器块:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /usr/share/nginx/html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://localhost/page-1/;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望当用户在 example.com 上收到 404 错误时,proxy_pass应该更改为直接访问http://localhost/example-404/.
然而,这个服务器块和两者的服务器块http://localhost具有相同的root,所以或者它可以只指向/example-404/内部,我不确定哪个更容易做到。不管怎样,我希望浏览器地址栏中的地址保持不变。
我想要这个的原因是如果http://localhost直接访问服务器将会有一个不同的404页面。我真的很感激任何人对此的想法!
根据我的搜索,我遇到了一个似乎相当常见的问题,但是我已按照我遇到的所有说明和/或修复进行操作,但没有一个对我有用,所以我问这个希望有人可以引导我走向正确的方向。
我在 OS X 10.11.2 上通过 Homebrew 安装了 Jenkins 1.644。我按照这些说明如何在 OS X Server 5.0.15 网站内安装和设置它(我相信此版本的 OS X 服务器正在运行 Apache 2.4.16。
问题:当我连接到 Jenkins 中的管理控制台时,收到错误消息“您的反向代理设置似乎已损坏”。以及此詹金斯文档的链接。
点击http://127.0.0.1:8080/manage不会产生错误。
我已将代理设置添加到我的虚拟主机文件中,如下所示:
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / http://jenkins.exampledomain.com/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
Run Code Online (Sandbox Code Playgroud)
当我进行测试卷曲时:
curl -iLk -e https://jenkins.exampledomain.com/manage \
https://jenkins.exampledomain.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
HTTP/1.1 302 Found
Date: Fri, 22 Jan 2016 06:30:57 …Run Code Online (Sandbox Code Playgroud) 配置/应用程序.rb
config.middleware.insert_before(Rack::Runtime, Rack::ReverseProxy) do
reverse_proxy_options preserve_host: false
reverse_proxy '/external/app', 'https://runalong.com:64167/app'
end
Run Code Online (Sandbox Code Playgroud)
我使用rack-reverse-proxy将请求转发到另一个服务器(不是rails服务器),当请求特定的url时,该服务器在不同的主机上运行。现在我想验证用户是否使用设备登录,然后仅将请求转发到代理服务器,否则将用户发送回登录页面。
我有一个邮件服务器监听端口 8081 和示例路径。我希望能够将整个 URI 查询参数重定向到节点服务。我该怎么办呢。
例如我希望将以下帖子请求网址http://exmaple.com/foo/bar?bla=1传递到 http://example.com:8081/foo/bar?bla=1
它看起来非常简单和直接的例子,但就是无法让它工作,有什么想法吗?
location ^~ /foo/bar {
rewrite_log on;
rewrite ^/foo/bar(.*) /$1 break;
proxy_pass http://example.com:8081/foo/bar;
}
Run Code Online (Sandbox Code Playgroud) 我设置了一个 Nginx 反向代理,用作多个服务器(例如 confluence)的 SSL 卸载。我已经成功地获取了http://confluence和https://confluence,但是当我尝试重定向http://confluence:8090时,它尝试转到https://confluence:8090并失败。
如何从 URL 中删除端口?
下面的配置有点精简,但也许有帮助?标头中的 $server_port 位是否导致了问题?
server {
listen 8090;
server_name confluence;
return 301 https://confluence$request_uri;
}
server {
listen 443 ssl http2;
server_name confluence;
location / {
proxy_http_version 1.1;
proxy_pass http://confbackend:8091
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $server_name:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade; #WebSocket Support
proxy_set_header Connection $connection_upgrade; #WebSocket Support
}
}
Run Code Online (Sandbox Code Playgroud)
似乎这里有很多答案都涉及http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect,但我在这种混乱的混乱中找不到任何安慰。
我还以为你有一个服务器,但我正在尝试https://serverfault.com/questions/815797/nginx-rewrite-to-new-protocol-and-port的建议
我尝试弄乱该port_in_redirect off;选项,但也许我用错了?
编辑1:添加conf文件 …
我试图了解反向代理和负载平衡之间有何不同。何时使用反向代理而不是负载平衡很有用。
我们基于 PHP 的应用程序(定制的,无框架)有时需要使用其基本完整 URL(例如,将 URL 存储在发送给客户端的文件中)。例如,基于这个问题,我们的应用程序猜测这一点(这是基于比较和类似和__FILE__中的各种变量)。$SERVERSCRIPT_NAMESERVER_NAME
现在我们需要在应用程序前面设置一个(nginx)反向代理。假设我们映射https://example.com/some/dir/onproxy/到http://backend/another/dir/onbackend/.
https://example.com/some/dir/onproxy/有没有办法从代码中猜测公共 URL( ) backend?
AFAIU(根据我的阅读和实验),这是不可能的(HTTP_HOST可能给出example.com,但我没有发现任何表明的内容some/dir/onproxy),但也许我遗漏了一些东西(一些变量或 nginx 配置选项)。
任何想法 ?
如果不可能,唯一的解决方案就是存储https://example.com/some/dir/onproxy/在配置中,对吧?
编辑1
根据@Progman的建议,我尝试了这个问题的解决方案。我已经尝试了接受的答案和第二高得票的答案,但都返回后端(http://backend/another/dir/onbackend/)上的 URL(某些变体)。
编辑2
我忘了提及,我想避免依赖代理中的 URL 重写。
我目前正在使用Flask和Gunicorn开发HTTP Rest API服务器.由于各种原因,不可能在Gunicorn面前放置反向代理服务器.我没有任何静态媒体,所有网址都由@app.routeFlask Framework中的模式提供.Flask可以单独在Gunicorn上运行吗?