Windows下用Nginx配置https服务器及反向代理的问题


Posted in Servers onSeptember 25, 2021

请求逻辑

前端 --> https方式请求nginx
nginx --> 通过http请求后端服务

安装OpenSSL

下载地址

Windows下用Nginx配置https服务器及反向代理的问题

然后配置环境变量。在系统环境变量中添加环境变量:

变量名:OPENSSL_HOME

变量值:F:\OpenSSL-Win64\bin;

(变量值为OPENSSL安装位置下的bin目录)

生成证书

用命令行随便打开一个目录, 使用如下命令生成证书

# 创建私钥
# test文件名是自己随便起即可, 这个命令会让你设置两次rsa的密码, 请务必记住该密码, 后续需要使用, 命令执行完毕, 会在当前目录生成 test.key 的文件
openssl genrsa -des3 -out test.key 1024     

# 创建csr证书, 这里用到的 test.key 是上一个命令生成的那个. 执行这个命令后,需要输入一系列的信息。输入的信息中最重要的为Common Name,这里输入的域名即为我们要使用https访问的域名 ,比如我输入的是localhost。其它的内容随便填即可。以上步骤完成后,ssl文件夹内出现两个文件:test.csr 和 test.key
openssl req -new -key test.key -out test.csr

# 去除密码
# 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码。
# 复制test.key并重命名为test.copy.key
# 在命令行中执行如下命令以去除口令(此时需要输入密码,这个密码就是上文中在创建私钥的时候输入的密码。)
openssl rsa -in test.copy.key -out test.key

# 生成crt证书. 证书生成完毕。我们发现,ssl文件夹中一共生成了4个文件。下面,配置https服务器的时候,我们需要用到的是其中的test.crt和test.key这两个文件。
openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt

Windows下用Nginx配置https服务器及反向代理的问题
Windows下用Nginx配置https服务器及反向代理的问题
Windows下用Nginx配置https服务器及反向代理的问题

下载安装nginx, 修改nginx配置

将生成的test.keytest.crt 移动到 $NGINX_ROOT/conf目录

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   D:/local-site;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    server {
       listen       8086;
       listen       localhost:8086;
       server_name  localhost;
       gzip on;
       gzip_buffers 4 16k;
       gzip_comp_level 6;
       gzip_vary on;
       gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

       location / {
           root   D:/local-site/good-test;
           index  index.html index.htm;
       }

       location ^~/api/ { 
           rewrite ^~/api/(.*)$ /$1 break;
           proxy_pass   http://localhost:8080/; #代理IP:端口
       }
    }

    # HTTPS server 配置, 这里使用了反向代理和跨域支持, 注意nginx和后端服务, 只需要在nginx设置跨域即可, 后端服务的跨域不要开启, 如果两边都开启了跨域, 会出问题
    #
    server {
       listen       443 ssl;
       server_name  localhost;

       ssl_certificate      test.crt;
       ssl_certificate_key  test.key;

       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }

       location / { 
        #    rewrite ^~/api/(.*)$ /$1 break;
            # add_header Access-Control-Allow-Origin *;
            # 允许客户端的请求方法
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
            # 允许客户端提交的的请求头
            add_header 'Access-Control-Allow-Headers' 'Origin, x-requested-with, Content-Type, Accept, Authorization';
            # 允许客户端提交Cookie
            add_header 'Access-Control-Allow-Credentials' 'true';
            # 允许客户端访问的响应头
            add_header 'Access-Control-Expose-Headers' 'Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma';

            proxy_pass   http://10.114.119.61:8080;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
       }
    }

    server {
       listen       8443 ssl;
       server_name  localhost;

       ssl_certificate      test.crt;
       ssl_certificate_key  test.key;

       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }

       location / { 
        #    rewrite ^~/api/(.*)$ /$1 break;
            # add_header Access-Control-Allow-Origin $http_origin;
            # 允许客户端的请求方法
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
            # 允许客户端提交的的请求头
            add_header 'Access-Control-Allow-Headers' 'Origin, x-requested-with, Content-Type, Accept, Authorization';
            # 允许客户端提交Cookie
            add_header 'Access-Control-Allow-Credentials' 'true';
            # 允许客户端访问的响应头
            add_header 'Access-Control-Expose-Headers' 'Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma';

            # 这是是配置需要代理的服务
            proxy_pass   http://10.114.119.61:7001;
            # proxy_pass https://172.16.46.38:8443;
            # proxy_pass   http://10.114.119.61:8866;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
       }
    }

}

重启nginx

本地域名配置

打开C:\Windows\System32\drivers\etc\hosts文件

加入配置:

10.114.119.61 pan.test.com
10.114.119.61 pan.uat.com

到此这篇关于Windows下用Nginx配置https服务器及反向代理的文章就介绍到这了,更多相关Nginx配置https服务器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
nginx里的rewrite跳转的实现
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
nginx配置虚拟主机的详细步骤
Jul 21 Servers
nginx服务器的下载安装与使用详解
Aug 02 Servers
Linux安装apache服务器的配置过程
Nov 27 Servers
Windows Server 2019 配置远程控制以及管理方法
Apr 28 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
Nginx 匹配方式
May 15 Servers
利用Apache Common将java对象池化的问题
Jun 16 Servers
nginx静态资源的服务器配置方法
Jul 07 Servers
Nginx如何限制IP访问只允许特定域名访问
Jul 23 Servers
nginx安装以及配置的详细过程记录
Sep 15 #Servers
Nginx缓存设置案例详解
Sep 15 #Servers
图文详解Nginx版本平滑升级方案
Sep 15 #Servers
Nginx配置文件详解以及优化建议指南
Sep 15 #Servers
学习nginx基础知识
Nginx location 和 proxy_pass路径配置问题小结
Sep 04 #Servers
Nginx使用Lua模块实现WAF的原理解析
You might like
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
携程英文网站:Trip.com
2017/02/07 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
亲子拓展活动方案
2014/02/20 职场文书
幼儿园运动会口号
2014/06/07 职场文书
植树造林的宣传标语
2014/06/23 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
Redis性能监控的实现
2021/07/09 Redis