GVKun编程网logo

如何处理Nginx反向代理https到http方案重定向(nginx反向代理 重定向)

14

此处将为大家介绍关于如何处理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反向代理 重定向)

如何处理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

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

HTTP在nginx.conf中重定向到HTTPS

我自定义了您的docker-compose-yml。

  1. 您的docker-compose.yml不适用于https,因为某些部分错误或缺失。

  2. 要使用HTTPS,必须使用Openssl创建证书。这些必须位于容器中的/ etc / nginx / certs文件夹中。

  3. 将证书放入文件夹时,必须设置-VIRTUAL_PORT = 8080到443,并将APP_URL从http更改为https

  4. 启动服务并将其分配给网络“ web”时,nginx会自动看到已注册新服务。它会自动映射到映像中指定的端口。这是通过音量命令“ /tmp/docker.sock:ro”发生的。 “:ro”代表只读

  5. 如果您将服务分配给网络“内部”,则无法从外部访问该服务,Nginx将忽略该服务。请参阅“ mysql”服务。

  6. 对于“ depends_on:”,我说所有服务都必须在书架开始之前启动。这个很重要!首先是Nginx,然后是MySql,最后是书库。

  7. 我更喜欢在其自己的本地域上使用VIRTUAL_HOST。您也可以在那里使用localhost,唯一重要的是操作系统中的“主机”文件指向您的外部Docker IP。例如:“ 192.168.5.121 bookstack.local”

  8. 我的小费!我会将服务“ 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负载均衡

kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡

 

微信开发要求 必须用https 和 wss连接, 这里给出Nginx反向代理配置, 自己使用一切正常,希望能帮助大家。域名一定要在微信开发后台设置,不然连接不上,  域名要备案,不然 审核不通过。
Nginx.conf 添加两行


wss.conf 如下

  1. upstream login_websocket {
  2.     server 120.*.*.*:20013 weight=1;
  3.         server 120.*.*.*:20014 weight=1;
  4.         server 120.*.*.*:20012 weight=1;
  5. }
  6. upstream baseapp_websocket0 {
  7.     server 120.*.*.*:20015;
  8. }
  9. upstream baseapp_websocket1 {
  10.     server 120.*.*.*:20016;
  11. }
  12. upstream baseapp_websocket2 {
  13.     server 120.*.*.*:20017;
  14. }
  15. upstream web {
  16.     server www.**.cn:8081; #域名 端口自己设置
  17. }
  18. server {
  19.     listen 443;
  20.     #server_name www.goworldcup.cn
  21.     ssl on;
  22.     ssl_certificate /usr/local/Nginx/conf/server.crt;
  23.     ssl_certificate_key /usr/local/Nginx/conf/server.key;
  24.     ssl_session_timeout 5m;
  25.     ssl_session_cache shared:SSL:50m;
  26.     ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
  27.     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  28.     underscores_in_headers on;
  29.     location /login {
  30.         proxy_pass http://login_websocket;#代理到上面的地址去
  31.         proxy_http_version 1.1;
  32.         proxy_set_header Upgrade $http_upgrade;
  33.         proxy_set_header Connection "Upgrade";
  34.     }
  35.  
  36.     location /baseapp0 {
  37.         proxy_pass http://baseapp_websocket0;#代理到上面的地址去
  38.         proxy_http_version 1.1;
  39.         proxy_set_header Upgrade $http_upgrade;
  40.         proxy_set_header Connection "Upgrade";
  41.     }
  42.        
  43.         location /baseapp1 {
  44.         proxy_pass http://baseapp_websocket1;#代理到上面的地址去
  45.         proxy_http_version 1.1;
  46.         proxy_set_header Upgrade $http_upgrade;
  47.         proxy_set_header Connection "Upgrade";
  48.     }
  49.        
  50.         location /baseapp2 {
  51.         proxy_pass http://baseapp_websocket2;#代理到上面的地址去
  52.         proxy_http_version 1.1;
  53.         proxy_set_header Upgrade $http_upgrade;
  54.         proxy_set_header Connection "Upgrade";
  55.     }
  56.  
  57.     #https协议转发 小程序里面要访问的链接
  58.     location /{
  59.     proxy_pass http://web;#代理到原有的http的地址去
  60.     proxy_set_header   X-Real-IP        $remote_addr;
  61.     proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  62.     add_header Access-Control-Allow-Origin *;#跨域访问设置
  63.     }
  64. }

mac环境下配置nginx反向代理,https协议

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协议的相关知识,请在本站搜索。

本文标签: