nginx配置ssl证书实现https访问
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了nginx配置ssl证书实现https访问,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7800字,纯文字阅读大概需要12分钟。
内容图文
![nginx配置ssl证书实现https访问](/upload/InfoBanner/zyjiaocheng/931/ebc6eb88c81c40ed817b020c457e0d8f.jpg)
需求:网站之前是http协议的,老提醒不安全,老板让加个锁,第一次配https,中间遇到的测试配置文件中的坑记录下来
常见错误:
-
[emerg] the “ssl” parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf
这是缺少
http_ssl_module
配置
- Permission denied,这是没有启动权限,我们在命令前加上bash
当前环境:阿里云服务器、nginx
思路:阿里免费买一个 下载证书 放到服务器上(其他地方买证书也可以),然后配置nginx
![nginx配置ssl证书实现https访问 - 文章图片](/upload/getfiles/0001/2021/5/10/20210510051218815.jpg)
2.下载Nginx压缩包,得到key和pem文件,我把他放在服务器的新建的cert文件夹中,对应地址为:
/usr/local/nginx/conf/cert/文件名.pem;
/usr/local/nginx/conf/cert/文件名.key;
3.在修改配置文件nginx.conf
之前,最好做一个备份,防止修改错误,也能及时回退错误,我的地址:
/usr/local/nginx/conf
3.找到第一个监听80端口的server:下面是我修改好的server
server {
listen 80;
server_name 需要访问的域名;
rewrite ^(.*) https://需要访问的域名 permanent; #这句是代表 把http的域名请求转成https
location / {
root html;
index index.html index.htm;
proxy_pass http://需要访问的域名; #因为这里还是80端口,所以保持http就可以了
}
}
4.第一个server修改好了之后。那么就需要开始配置第二个server。拉到文件的底部。看到有一个https类型的server,这是我们需要改的第二个server
这里除了HTTPS server这行之外,其他的 # 删除,启动https模块
# HTTPS server //这一行千万不要删 带着#号放这里
server {
listen 443 ssl;
server_name 需要访问的域名,这里也不用加https;
ssl on;
ssl_certificate /usr/local/nginx/cert/文件名.pem; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_certificate_key /usr/local/nginx/cert/文件名.key; #这里是ssl key文件存放的绝对路径,根据自己的文件名称和路径来写
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://需要访问的域名:8080/;
}
}
5.配置好后,nginx的配置就算是完成了。不过这只是配置ssl证书的第一步!接下来我们检测下配置文件正确与否
/usr/local/nginx/sbin/nginx -t
(如果nginx曾经安装过SSL模块,那么应该会显示上面界面,直接重启nginx就可以了)
但是很多是第一次安装https证书,会报错缺少SSL模板--with-http_ssl_module
,报错
6.这时候我们就可以先安装SSL模块:
先确认2个位置:
1)我的nginx是安装在了/usr/local/nginx/下
2)我的nginx的源码包放在了/usr/local/nginx/nginx/nginx-1.10.0下。如果没有的话,重新下载你对应的nginx版本的源码包,我是搜的nginx-1.10.0,下载到本地,然后在对应nginx里新建nginx文件夹放进去,因为一会需要用到configure
目录切换到我们的源码包安装位置:
cd /usr/local/nginx/nginx/nginx-1.1.0
用下面命令可以查看nginx版本,也可以查看configure arguments: 如果没有其他配置则为空。
/usr/local/nginx/sbin/nginx -V
执行语句,添加ssl模块
比如之前为configure arguments:--prefix=/usr/local/nginx --with-http_stub_status_module
则加上--with-http_ssl_module
,命令为:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
这时候可能又会有点小插曲,启动ssl模块的时候,报错了:
看到了error。就知道linux安装失败,停止了。这个错误是因为我们没有安装openssl openssl-devel(如果这一步没有报错的话,可以跳过下面的安装openssl-devel的步骤)
5、那么可以先执行安装openssl openssl-devel语句:
yum -y install openssl openssl-devel
安装上了 openssl-devel后,重新执行:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
6、此时可能还有个报错: Permission denied,我们在命令前加上bash
bash ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
7、这时候应该就执行配置成功了。配置成功后,那么就需要编译我们的配置。(注意这里只能用make 而不要用make install,因为执行make install是覆盖安装的意思)
运行:
make
等待执行完成后,我们需要把新编译的nginx模块替换原来的nginx。
8、还是老规矩,先备份旧的nginx,执行语句(这里面复制的文件的路径需要根据你们安装的目录自行修改,如果和我安装的路径是一样的那么可以直接运行该语句):
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
9、关闭nginx(因为要把新的模块覆盖旧的nginx)
先找到nginx端口号,如图,目前我nginx的进程号为:14823
ps -ef|grep nginx
杀死该进程就可以了,执行语句:
kill -quit 14823
9、关闭nginx进程后就可以开始替换了(注意:我当前的位置是在我nginx的源码包中,目录不要搞错了)
执行:(复制到我的nginx的目录中)
cp ./objs/nginx /usr/local/nginx/sbin/
10、然后就是启动nginx。在启动之前,也可以在测试一次配置文件是否已经生效:ok就是配置文件正确
/usr/local/nginx/sbin/nginx -t
11、最后启动nginx:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
因为刚才替换nginx模块的时候是把nginx进程都杀死了,所以要用上面的命令进行启动,而不能使用reload重启。
nginx正常启动后,我们在访问我们的网站,发现https就已经配置好了:
我的服务器上由于有两个网站,一个前台一个后台,还配置的有微信公众号配置文件,稍有不同;location部分采用自己的就可以,全部代码如下:
#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 300;
#gzip on;
client_max_body_size 1000m;
server {
listen 80;
server_name admin.我的域名;
location / {
proxy_pass http://127.0.0.1:9090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name www.我的网站域名;
rewrite ^(.*) https://www.我的网站域名 permanent;
location /我的微信公众平台配置的转发 可删.txt {
default_type text/html;
return 200 'ywtRfOh9gFaw3zfj';
}
location / {
proxy_pass http://127.0.0.1:10001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# HTTPS server
server {
listen 443 ssl;
ssl on;
server_name www.我的网站域名;
ssl_certificate /usr/local/nginx/conf/cert/我的证书名.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/我的证书名.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location /我的微信公众平台配置的转发 可删.txt {
default_type text/html;
return 200 'ywtRfOh9gFaw3zfj';
}
location / {
proxy_pass http://127.0.0.1:10001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
小拓展(不影响的,上面步骤即可配置完成):
刚才配置nginx的时候是直接在配置文件上做修改,其实我们可以把小的配置抽离出去,尽量保持原配置文件不被修改
我们可以在原有配置文件中,加上这句(注意作用域范围,是引入到http的{}之内):
include vhost/*.conf;
接下来,需要找到对应的配置文件,因为我们这里的路径是直接 vhost。所以在配置文件同级目录,新建一个 vhost 文件夹,而且我们引入的是 *.conf 。意思就是引入vhost中所有后缀是.conf的配置文件:
在配置文件中,加上我们刚才教程提到的配置:
server {
listen 80;
server_name 需要访问的域名(不加http头);
rewrite ^(.*) https://servernameservername1 permanent;
\#charset koi8-r;
\#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://需要访问的域名
}
}
\# HTTPS server
\#
server {
listen 443 ssl;
server_name 需要访问的域名;
ssl on;
ssl_certificate /usr/local/nginx/ssl/ssl.pem;
ssl_certificate_key /usr/local/nginx/ssl/ssl.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://需要访问的域名:8080/;
}
}
保存后,也是使用nginx -t测试配置文件是否成功,成功后重启nginx即可。
如果有多个二级域名,那么就复制多份 xx.conf文件即可,配置文件会自动引入到nginx的配置中,不过每次新增配置文件都需要检测一遍,然后重启nginx
内容总结
以上是互联网集市为您收集整理的nginx配置ssl证书实现https访问全部内容,希望文章能够帮你解决nginx配置ssl证书实现https访问所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。