nginx实现https转发

1.  要有安全证书和key文件: *.crt, *.key; 保存在根目录下(位置不重要, 只要绝对路径可以找的到)

2. 修改nginx.conf

#user  nginx; #当前用户
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    proxy_buffer_size   1024k;
    proxy_buffers   4 2048k;

    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream serverNode {
        server 127.0.0.1:8080; 
        server 127.0.0.2:8080; 
    }

    # HTTPS server
    server {
        listen   80;	# http端口
        listen 443 ssl; # https端口
        server_name  localhost; # 配置的https的域名
		
        ssl_certificate      /etc/nginx/ssl.crt;  # 证书的crt文件所在目录(如果是阿里云申请的证书,就是*.pem文件)
        ssl_certificate_key  /etc/nginx/ssl.key;  # 证书key文件所在目录(使用绝对路径)

        location ~* /https/serverNode {
            #proxy_set_header Host $host:30443; #对外映射端口
            proxy_pass http://serverNode;  #转发后访问的地址
        }
    }

}





######## 示例2 #########
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
         
    # HTTPS server
    server {
        listen   80;	
        listen   443 ssl; 
        server_name  localhost;
		
        ssl_certificate      /etc/nginx/ssl.crt;
        ssl_certificate_key  /etc/nginx/ssl.key; 
 
       location / {
            proxy_redirect off;
            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_pass http://172.16.11.101:8881;
       }
    }
 
}

3. 没有申请安全证书, 自定义一个

   3.1 下载OpenSSL: https://www.openssl.org/source/ , 安装: https://www.cnblogs.com/rxbook/p/9367725.html

  3.2 (nginx目录下执行命令)

# *.crt  *.key  C:国家代码 ST:省 L:市 O:组织名称 OU:组织单位名称 CN:域名
$ openssl req -new -newkey rsa:2048 -sha256 -nodes -out ssl.crt -keyout ssl.key -subj "/C=CN/ST=js/L=nanjing/O=sss/OU=ssl/CN=ssl.com"

 

或者

# 生成一个RSA密钥 (这里需要输入密码,不小于4位)
$ openssl genrsa -des3 -out ssl.key 1024

$ cp ssl.key ssl.key.org

# 拷贝一个不需要输入密码的密钥文件(这里会验证密码, 就是上面命令输入的密码)
$ openssl rsa -in ssl.key.org -out ssl.key

# 生成一个证书请求(这里需要输入一些信息, 除了国家Country Name和域名Common Name其它可以随便写)
$ openssl req -new -key ssl.key -out ssl.csr

# 自己签发证书
$ openssl x509 -trustout -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt

#没有-trustout,重启nignx可能会报:cannot load certificate "/etc/nginx/ssl.crt": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

执行完就会得到安全证书了.

# docker 环境下

# 拉取nginx镜像, 以nginx-1为容器名启动, 映射80和443端口
$ docker pull nginx
$ docker run --name nginx-1 -p 3080:80 -p 30443:443 -d nginx

# -- 生成安全证书 -- 

$ docker cp ssl.key nginx-1:/etc/nginx/ssl.key
$ docker cp ssl.crt nginx-1:/etc/nginx/ssl.crt

# 编辑配置文件, 覆盖nginx默认配置文件
$ vi nginx.conf
$ docker cp nginx.conf nginx-1:/etc/nginx/nginx.conf

# 进入容器, 重新加载配置文件
$ docker exec -it nginx-1 bash
$ cd /etc/nginx
$ nginx -s reload

# -- 退出, 测试 --

4. nginx安装地址和安全证书域名不一致问题

    Windows下: 

    修改 C:\Windows\System32\drivers\etc\hosts 文件

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
	0.0.0.0 account.jetbrains.com
#	::1             localhost

# 最后一行追加 本地ip  安全证书域名
127.0.0.1  www.baidu.com

  Linux下:         

$ vim /etc/hosts
# 最后一行追加 本地ip  安全证书域名
127.0.0.1 www.baidu.com

# 或 hostnamectl set-hostname 安全证书域名
$ hostnamectl set-hostname www.baidu.com

# 设置后可以用 hostname 查看域名

注: 1. hosts文件 一行里有且仅有一个ip;  一个ip后面可以加无数个域名;  多行ip对应一个域名时, 按第一个ip解析. 

      2. 域名需要注意的地方: hosts文件, nginx.conf文件, 安全证书绑定;

      3. nginx默认配置文件有一行include引入其它配置文件, 小心冲突;

      4. 转发的地址不要用127.0.0.1或localhost;

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
nginx可以通过配置文件中的stream模块来实现转发。首先,打开nginx的配置文件,可以使用sudo gedit /etc/nginx/nginx.conf命令来编辑。 在配置文件中,添加stream模块的配置,可以参考以下示例。示例中,我们将53端口和80端口的请求转发到其他端口进行服务。你也可以根据需要进行修改。 ``` stream { log_format proxy '$remote_addr [$time_local ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log /var/log/nginx/access.log proxy; open_log_file_cache off; upstream dns_proxy { server 127.0.0.1:8053; } upstream hello_proxy { server 127.0.0.1:8000; } server { listen 53 udp reuseport; proxy_pass dns_proxy; } server { listen 8054; proxy_connect_timeout 1s; proxy_timeout 300s; proxy_pass hello_proxy; } } ``` 配置完成后,保存文件并重启nginx服务,可以使用sudo nginx -s reload命令来重启。 这样,nginx就可以简单地实现转发功能了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用nginx实现四层负载均衡(利用nginx实现请求转发)](https://blog.csdn.net/weixin_44358770/article/details/125065779)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [nginx实现请求转发](https://download.csdn.net/download/weixin_38609128/12900744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值