此处将为大家介绍关于如何处理Nginx反向代理https到http方案重定向的详细内容,并且为您解答有关nginx反向代理重定向的相关问题,此外,我们还将为您介绍关于CentOS云主机中Nginx正向
此处将为大家介绍关于如何处理Nginx反向代理https到http方案重定向的详细内容,并且为您解答有关nginx反向代理 重定向的相关问题,此外,我们还将为您介绍关于CentOS云主机中Nginx正向代理http、https、HTTP在nginx.conf中重定向到HTTPS、kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡、mac环境下配置nginx反向代理,https协议的有用信息。
本文目录一览:- 如何处理Nginx反向代理https到http方案重定向(nginx反向代理 重定向)
- CentOS云主机中Nginx正向代理http、https
- HTTP在nginx.conf中重定向到HTTPS
- kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡
- mac环境下配置nginx反向代理,https协议
如何处理Nginx反向代理https到http方案重定向(nginx反向代理 重定向)
我已经在托管jenkins和其他一些应用程序的ubuntu实例上将nginx设置为反向代理。我正在使用nginx根据相对路径路由到各种应用程序。从客户端到nginx的所有流量都通过https。在防火墙后面,nginx将所有内容通过http路由到配置的路径和端口号。看起来像这样:
firewall | |--->https--->nginx---http--->jenkins | |
Nginx配置文件的相关部分是这样的:
server { listen 443 ssl; ssl_certificate cert.crt; ssl_certificate_key cert.key; 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 /jenkins { proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:6969; }}
问题是jenkins使用简单的身份验证,并且在成功登录后会发送302重定向。Nginx正确代理URL和端口,但不代理方案。因此客户端遵循通过HTTP而不是https的重定向。然后,在浏览器中,我收到400错误:
400 Bad Request The plain HTTP request was sent to HTTPS port
我知道有一个方案变量:$scheme。但是我不知道如何告诉nginx映射从jenkins到https的http重定向。
答案1
小编典典我无法使用proxy-redirect,rewrite和return指令来实现我想要的行为。设置jenkins以使用https解决了该问题。
CentOS云主机中Nginx正向代理http、https
正向代理http
在目录/apps/conf/Nginx/vhosts
新建文件比如a.test.com,文件内容如下
server { listen 80; server_name a.test.com ; location / { expires 302400s; proxy_pass url; //自定义要代理的使用http协议的url } access_log /apps/logs/Nginx/a.test.com.log log_access; }
然后在Nginx.conf的http块中添加
include /apps/conf/Nginx/vhosts/*.com;
重启下Nginx,本地配上server_name的host就可以实现http的正向代理
测试代理
curl --proxy ip:80 http://a.test.com
正向代理https
因为 Nginx 不支持 CONNECT,所以无法正向代理 Https 网站。
如果访问 Https 网站,比如:https://www.baidu.com,Nginx access.log 日志如下:
“CONNECT www.baidu.com:443 HTTP/1.1” 400
Nginx使用ssl模块配置HTTPS支持
这里要使用到OpenSSL,可以Nginx的conf目录下创建证书和私钥
创建服务器私钥,命令会让你输入一个口令
openssl genrsa -des3 -out server.key 1024
创建签名请求的证书(CSR)
openssl req -new -key server.key -out server.csr
这个命令后会让填一些证书信息,详见参考[2]
Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg,city) [Default City]: Organization Name (eg,company) [Default Company Ltd]: Organizational Unit Name (eg,section) []: Common Name (eg,your name or your server's hostname) []: Email Address []:
在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
cp server.key server.key.org openssl rsa -in server.key.org -out server.key
最后标记证书使用上述私钥和CSR
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
下面的配置内容和正向代理http有点类似,还用上面的文件例子
server { listen 443; server_name a.test.com; ssl on; ssl_certificate /apps/conf/Nginx/conf/server.crt; ssl_certificate_key /apps/conf/Nginx/conf/server.key; location / { expires 302400s; proxy_pass https://XXXX; //这里可以是http或https } access_log /apps/logs/Nginx/a.test.com.log log_access; }
然后配置下本地host就可以代理https请求了。
还可以将http请求重定向到https,例如下面配置
server { listen 80; server_name a.test.com; rewrite ^(.*) https://$server_name$1 permanent; }
[参考]
[1] nginx使用ssl模块配置HTTPS支持
[2] Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程
HTTP在nginx.conf中重定向到HTTPS
我自定义了您的docker-compose-yml。
-
您的docker-compose.yml不适用于https,因为某些部分错误或缺失。
-
要使用HTTPS,必须使用Openssl创建证书。这些必须位于容器中的/ etc / nginx / certs文件夹中。
-
将证书放入文件夹时,必须设置-VIRTUAL_PORT = 8080到443,并将APP_URL从http更改为https
-
启动服务并将其分配给网络“ web”时,nginx会自动看到已注册新服务。它会自动映射到映像中指定的端口。这是通过音量命令“ /tmp/docker.sock:ro”发生的。 “:ro”代表只读
-
如果您将服务分配给网络“内部”,则无法从外部访问该服务,Nginx将忽略该服务。请参阅“ mysql”服务。
-
对于“ depends_on:”,我说所有服务都必须在书架开始之前启动。这个很重要!首先是Nginx,然后是MySql,最后是书库。
-
我更喜欢在其自己的本地域上使用VIRTUAL_HOST。您也可以在那里使用localhost,唯一重要的是操作系统中的“主机”文件指向您的外部Docker IP。例如:“ 192.168.5.121 bookstack.local”
-
我的小费!我会将服务“ nginx--proxy”存储在单独的docker-compose文件中。然后,您可以轻松地在nginx中注册其他服务。
祝您好运,如果您只想在本地使用Bookstack,那么现在HTTPS可能就不再那么紧迫了。否则,搜索“为Nginx本地创建证书”
在开始创建网络“ web”之前:
docker network create web
version: '2.4'
services:
mysql:
image: mysql:5.7.21
container_name: bookstack-mysql
restart: unless-stopped
networks:
- "internal"
healthcheck:
test: "exit 0"
environment:
- MYSQL_ROOT_PASSWORD=admin
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=admin
volumes:
- ./docker/data/mysql:/var/lib/mysql
bookstack:
image: solidnerd/bookstack:0.29.3
container_name: bookstack
restart: unless-stopped
networks:
- "web"
- "internal"
depends_on:
nginx--proxy:
condition: service_started
mysql:
condition: service_healthy
environment:
- VIRTUAL_HOST=bookstack.local
- VIRTUAL_PORT=8080
- DB_HOST=mysql:3306
- DB_DATABASE=bookstack
- DB_USERNAME=bookstack
- DB_PASSWORD=admin
- APP_URL=http://bookstack.local
volumes:
- ./docker/data/uploads:/var/www/bookstack/public/uploads
- ./docker/data/storage-uploads:/var/www/bookstack/storage/uploads
nginx--proxy:
image: jwilder/nginx-proxy:latest
container_name: nginx--proxy
restart: always
environment:
DEFAULT_HOST: default.vhost
ports:
- "80:80"
- "443:443"
volumes:
- ./docker/data/certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- "web"
- "internal"
networks:
web:
external: true
internal:
external: false
,
该解决方案对我有用:-
在docker-compose.yml中的nginx服务部分添加了networks标签-
networks:
- bookstack-bridge
然后在nginx.conf中添加了proxy_pass as-
proxy_pass http://bookstack:8080;
谢谢你们的帮助。
kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡
微信开发要求 必须用https 和 wss连接, 这里给出Nginx反向代理配置, 自己使用一切正常,希望能帮助大家。域名一定要在微信开发后台设置,不然连接不上, 域名要备案,不然 审核不通过。
Nginx.conf 添加两行
wss.conf 如下
- upstream login_websocket {
- server 120.*.*.*:20013 weight=1;
- server 120.*.*.*:20014 weight=1;
- server 120.*.*.*:20012 weight=1;
- }
- upstream baseapp_websocket0 {
- server 120.*.*.*:20015;
- }
- upstream baseapp_websocket1 {
- server 120.*.*.*:20016;
- }
- upstream baseapp_websocket2 {
- server 120.*.*.*:20017;
- }
- upstream web {
- server www.**.cn:8081; #域名 端口自己设置
- }
- server {
- listen 443;
- #server_name www.goworldcup.cn
- ssl on;
- ssl_certificate /usr/local/Nginx/conf/server.crt;
- ssl_certificate_key /usr/local/Nginx/conf/server.key;
- ssl_session_timeout 5m;
- ssl_session_cache shared:SSL:50m;
- ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
- underscores_in_headers on;
- location /login {
- proxy_pass http://login_websocket;#代理到上面的地址去
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- }
- location /baseapp0 {
- proxy_pass http://baseapp_websocket0;#代理到上面的地址去
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- }
- location /baseapp1 {
- proxy_pass http://baseapp_websocket1;#代理到上面的地址去
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- }
- location /baseapp2 {
- proxy_pass http://baseapp_websocket2;#代理到上面的地址去
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "Upgrade";
- }
- #https协议转发 小程序里面要访问的链接
- location /{
- proxy_pass http://web;#代理到原有的http的地址去
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- add_header Access-Control-Allow-Origin *;#跨域访问设置
- }
- }
mac环境下配置nginx反向代理,https协议
安装ngxin
通过brew安装nginx
步骤一
安装brew
官网:http://brew.sh/
打开终端,输入以下命令安装brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
步骤二、
安装nginx
brew install nginx
注意点:
项目所在目录注意是否有访问权限,如果不会设置最好把项目放到nginx默认目录
/user/local/var/www
默认 root html; 的真实路径为
/usr/local/Cellar/nginx/1.2.3/html
指向到:
/usr/local/var/www
文件夹所有权是 root wheel
修改 nginx.conf 的 user root wheel;
修改自定义网站代码所在目录的所有权为 chown -R root:wheel www;
今天关于如何处理Nginx反向代理https到http方案重定向和nginx反向代理 重定向的讲解已经结束,谢谢您的阅读,如果想了解更多关于CentOS云主机中Nginx正向代理http、https、HTTP在nginx.conf中重定向到HTTPS、kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡、mac环境下配置nginx反向代理,https协议的相关知识,请在本站搜索。
本文标签: