每日一博 | 简单6步用 nginx 搭建 https 服务器

1 下载安装nginx: nginx可以从 这里 选择对应版本下载,我下载的是1 8 1版本。下载完成后,直接解压缩,命令窗口进入根目录,输入

1.下载安装nginx:

nginx可以从 这里

选择对应版本下载,我下载的是1.8.1版本。下载完成后,直接解压缩,命令窗口进入根目录,输入命令:

start nginx

在浏览器中,直接输入"localhost",可以看到nginx的欢迎页,表明启动成功。

2.下载安装openssl:

可从 这里

选择适合自己的版本下载,我下载的是: Win64 OpenSSL v1.1.0b Light

,下载完成后,直接双击安装(安装选项一般默认即可)

3.生成证书

在nginx根目录下新建ssl文件夹(名字可以自己定),并在命令窗口进入此目录,按照如下的几个命令,完成证书创建过程。

#此步用于生成私钥,会提示输入密码,密码后面步骤需要用到;jason.key为私钥的名字,文件名可自己定

openssl genrsa -des3 -out jason.key 1024

#此步用于生成csr证书,jason.key为上一步骤生成的私钥名,jason.csr为证书,证书文件名可自定

#在此步过程中,会交互式输入一系列的信息(所在国家、城市、组织等),其中Common Name一项代表nginx服务访问用到的域名,我这里是本地测试,所以可以随意定一个jason.com,并在本地host文件中将此域名映射为127.0.0.1

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

#此步用于去除访问密码,如果不执行此步,在配置了ssl后,nginx启动会要求输入密码

#jason.key为需要密码的key,jason-np.key为去除访问密码的key文件

#操作过程中会要求输入密码,密码为生成key文件时的密码

openssl rsa -in jason.key -out jason-np.key

#此步用于生成crt证书

#jason.crt为第2步生成的csr证书名称,jason.crt为要生成的证书名称

openssl x509 -req -days 366 -in jason.csr -signkey jason-np.key -out jason.crt

经过以上几个步骤,证书生成完毕,ssl文件夹下的jason.crt和jason-np.key为我们后续要使用的文件。

注:在执行openssl命令时,可能会出现提示找不到openssl配置文件:

can't open config file: /etc/ssl/openssl.cnf

实际配置文件存在,但不在这个目录(可以在openssl安装目录找到),我们可以直接在命令窗口设置下环境变量,使其指向正确的位置

#请根据你自己的安装目录调整

set OPENSSL_CONF=C:/OpenSSL-Win64/bin/openssl.cfg

4.nginx配置ssl

打开nginx目录下conf/nginx.conf文件,找到HTTPS server的配置,将配置项前面的注释符号去掉

修改前配置内容如下:

# HTTPS server

#

#server {

# listen 443 ssl;

# server_name localhost;

# ssl_certificate cert.pem;

# ssl_certificate_key cert.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;

# }

#}

修改后配置内容如下:

# HTTPS server

server {

listen 443 ssl;

server_name front;

ssl_certificate ./ssl/jason.crt;

ssl_certificate_key ./ssl/jason-np.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;

}

}

5.配置重定向,http请求自动跳转到https

如果我们希望强制使用https,可以将http的请求重定向到https,只需要在http对应server配置中添加rewrite

server {

listen 80;

server_name jason.com;

rewrite ^(.*) https://$server_name$1 permanent;

#省略其他配置......

}

6.启动nginx

命令窗口进入到nginx根目录,使用以下命令重新加载nginx配置文件

nginx -s reload

这里有两点需要注意:

1)由于nginx的cache模块需要用到共享内容,所以官方提示在window Vista之后的版本是不支持cache模块的,所以在配置文件中,ssl_session_cache一行不要注释掉,否则启动会报错

2)nginxssl使用的是443端口,如果系统中443已经被占用,在nginx的error.log文件中会有报错,且无法正常启动

bind() to 0.0.0.0:443 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

遇到这个问题,可在命令窗口通过以下命令查找占用端口的进程

netstat -ano|findstr "443"

结果列表中第2列代表进程监听的ip和端口,最后一列代表进程id,可根据id杀掉对应进程即可(有些进程是由系统服务启动的,需要关闭服务才行)。

正常启动后,浏览器中输入https://jason.com(jason.com是在第3步第2个命令中指定的),出现nginx欢迎页面,说明已配置成功。

未登录用户
全部评论0
到底啦