nginx实现https转发

您所在的位置:网站首页 nginx如何配置转发 nginx实现https转发

nginx实现https转发

2024-02-16 10:43| 来源: 网络整理| 查看: 265

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;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3