《Java实战开发》Windows系统Nginx 代理https请求和OpenSSL生成证书及异常处理

 

 

1.Nginx下载与安装

Nginx下载:http://nginx.org/en/download.html

打开目录应该是这样的

进入到nginx目录下,双击nginx.exe文件即可启动服务器。在浏览器地址栏输入http://localhost,如果可以成功访问到Nginx的欢迎界面,则说明安装成功。

2.OpenSSL下载与安装

OpenSSl下载:http://slproweb.com/products.html

在下载地址下载相应版本(win32或win64)的安装包后安装到指定目录我下到了D盘

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

变量名:OPENSSL_HOME

变量值:D:\OpenSSL\bin;

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

并在Path变量结尾添加: %OPENSSL_HOME%

3.生成加密证书

在nginx目录下新建ssl文件夹:

 

打开cmd进入nginx目录ssl文件夹下运行:

openssl genrsa -des3 -out wodekey.key 1024     # 文件名自定义

 

两次输入密码,然后记下来

3.1生成并创建csr证书

openssl req -new -key wodekey.key -out wodekey.csr

我在这个时候遇到了问题,报了这个错:Unable to load config info from /usr/local/ssl/openssl.cnf

原因:原来这是Unix的默认设置,

解决:就是按照路径新建文件c:/usr/local/ssl,从网上下载openssl.conf,然后改为openssl.cnf,置于c:/usr/local/ssl目录下

然后解决之后继续,执行命令,输入一系列的信息。信息中Common Name是我们要使用https访问的域名例如localhost。其它的内容随便填即可。此时ssl文件夹里应该有:wodekey.csr  和wodekey.key两个文件。

3.1.1除去口令密码

在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码。

复制wodekey.key并重命名为wodekey.key.org。

在命令行中执行如下命令以去除口令:

openssl rsa -in wodekey.key.org -out wodekey.key

然后输入密码,这个密码就是上文中在创建私钥的时候输入的密码。

3.1.2生成csr证书

openssl x509 -req -days 365 -in wodekey.csr -signkey wodekey.key -out wodekey.crt

生成证书完成,ssl文件夹里有4个文件 wodekey.crt  、 wodekey.csr 、 wodekey.key 、 wodekey.key.org 。

4.修改Nginx,修改nginx.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;

    


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

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


    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate     D://nginx-1.14.2//nginx-1.14.2//ssl//wodekey.crt;  #刚才生成的证书的地址
        ssl_certificate_key  D://nginx-1.14.2//nginx-1.14.2//ssl//wodekey.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;
			# proxy_pass   http://10.*.*.**:8080/;这个是代理到我的tomcat的地址
        }
    }
	
	   
	

}

4.1Nginx的常用操作和常见错误信息及解决办法

Windows命令行中操作Nginx的几个常用的语句:

start nginx               # 启动Nginx
nginx.exe -s stop         # 快速停止Nginx,可能并不保存相关信息
nginx.exe -s quit         # 完整有序的停止Nginx,并保存相关信息
nginx.exe -s reload       # 重新载入Nginx,当配置信息修改,需要重新载入这些配置时使用此命令。
nginx.exe -s reopen       # 重新打开日志文件
nginx -v                  # 查看Nginx版本

因为修改了配置文件,所以需要退出控制台,并重新打开一个控制台。nginx目录下执行如下命令:


nginx.exe -s quit
start nginx

即退出Nginx,然后再重新启动它。这时候,在浏览器地址栏输入https://localhost并回车。

这时候,你可能看到“您的连接不是私密连接”的提示,单击页面中的“高级”,并接着单击“继续前往localhost(不安全)”,就可以看到Nginx的欢迎界面了。说明https服务器已经配置成功了。

如果你只想用https://localhost访问这个https服务器,那么下面的内容你就不用接着往下看了。

但是,也许你可能还想要用一个别的域名(例如:https://xxx.yyy.com)来访问这个服务器。那么怎么做呢?这就需要继续往下看了。

4.2修改hosts配置,实现域名映射

要想用别的域名来访问上文配置好的https服务器,也很简单,修改hosts配置就可以了。你可以到这里下载一个hosts管理工具——SwitchHosts。安装号好之后,以管理员身份运行它。并添加上一个hosts项:

127.0.0.1  xxx.yyy.com

这样,你就可以通过https://xxx.yyy.com来访问配置好的https服务器了。

5.windows环境下cmd命令窗口执行nginx命令常见异常及解决

异常:10013: An attempt was made to access a socket in a way forbidden

原因:出现这个异常是端口被占用

解决:

       1. 按键盘win+r 打开运行界面,输入cmd,确定,打开控制台界面

       2.输入 netstat -aon | findstr : 端口号  ,查看占用端口信息    

       3.输入  tasklist|findstr "占用的服务pid"  查看占用服务的名称 

       4.打开任务管理器关闭服务

       5.重启nginx搞定

异常:[error] OpenEvent("Global\ngx_stop_25184") failed (2: The system cannot find the file specified)

原因:nginx服务未启动

解决:重启nginx,打开任务管理器确认是否启动,如果还未启动,打开nginx目录下log包,查看日志

异常:无法找到 "logs/nginx.pid"

原因:当nginx被停止(nginx -s stop)或者直接杀掉了进程(kill -9 nginx的进程号)或者意外重启后,调用命令(nginx -s reload 或 nginx -s reopen)会报错,nginx被停止时,nginx.pid被删除了。  而 reopen和 reload命令需要通过nginx.pid获取进程号,会去找nginx.pid ,如果不存在,就报错了。

解决:下 在nginx的 logs/新建一个nginx.pid 文件,之后运行 nginx -c /mynginx/conf/nginx.conf        #mynginx是我的nginx目录, nginx -c 为指定目录的配置文件 nginx.conf

查看任务管理器,开nginx服务是否启动正常,一般为两个

本博文参考了:https://www.cnblogs.com/chasewade/p/7661290.html,十分感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值