Nginx之Https最佳实践(跳转)

nginx的https协议需要ssl模块的支持,我们在编译nginx时使用--with-http_ssl_module参数加入SSL模块。还需要服务器私钥,服务器证书,如果是公司对外环境,这个证书需要购买第三方的权威证书,否则用户体验得不到保障。

1.1检查Nginx的SSL模块是否安装

[[email protected]~]# /application/nginx/sbin/nginx -V

nginx version:nginx/1.9.13

built by gcc4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built withOpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI supportenabled

configure arguments: --prefix=/application/nginx-1.9.13--user=nginx --group=nginx --with-http_ssl_module--with-http_stub_status_module

1.2生成证书和密钥

1.2.1创建服务器私钥

[[email protected]~]# cd /application/nginx/conf/

[[email protected]]# mkdir key       《====创建要生成证书的目录

[[email protected]]# cd key          《====进入要生成证书的目录

[[email protected]]# openssl genrsa -des3 -out server.key 1024     《====使用openssl创建服务器私钥

..++++++

…++++++

e is 65537 (0x10001)

Enter pass phrase for server.key:

Verifying – Enter pass phrase forserver.key:

1.2.2 创建证书签名请求(Certificate Signing Request (CSR))【证书签名请求(CSR)】

[[email protected] key]# openssl req -new -key server.key -out server.csr

说明:这是用步骤1的密钥生成证书请求文件server.csr, 这一步提很多问题,一一输入

Enter pass phrase for server.key:

You are about to be asked to enter information thatwill be incorporated

into your certificate request.

What you are about to enter is what is called aDistinguished Name or a DN.

There are quite a few fields but you can leave someblank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:BJ

Locality Name (eg, city) [Default City]:BJ

Organization Name (eg, company) [Default CompanyLtd]:SDU

Organizational Unit Name (eg, section)[]:SA

Common Name (eg, your name or your server’shostname) []:TANK

Email Address []:[email protected]

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password[]:

An optional company name []:

1.2.3清除以SSL启动NGINX时提示必须输入密钥

[[email protected]]# cp server.key server.key.ori

[[email protected]]# openssl rsa -in server.key.ori -out server.key 《==创建要生成证书的目录

Enter pass phrase for server.key.ori:

writing RSA key

1.2.4生成使用签名请求证书和私钥生成自签证书

[[email protected]]# openssl x509 -req -days 365 -in server.csr-signkey server.key -out server.crt

Signature ok

subject=/C=CN/ST=BJ/L=BJ/O=SDU/OU=SA/CN=TANK/[email protected]

Getting Private key

说明:这是用步骤1,2的的密钥和证书请求生成证书server.crt。  【-days参数指明证书有效期,单位为天】

1.2.5检查生成的证书和私钥

[[email protected]]# pwd

/application/nginx/conf/key

[[email protected]]# ls

server.crt server.csr  server.key  server.key.ori

1.3开启Nginx SSL

[[email protected] key]# cat /application/nginx/conf/nginx.conf

server {

ssl on;

ssl_certificate /application/nginx/conf/key/server.crt;

ssl_certificate_key /application/nginx/conf/key/server.key;

listen       443;

server_name  www.miaomiao.com;

location /{

root   /opt/web/www.miaomiao.com;

index  index.html index.htm;

}

}

1.3.1重启nginx生效

[[email protected] key]# /application/nginx/sbin/nginx -s reload

[[email protected] key]# netstat -lntup|grep 443

tcp       0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      11404/nginx

1.3.2测试https

由于该证书非第三方权威机构颁发,而是我们自己签发的,所以浏览器会警告,如果是对外的业务需要加密,必须使用商用第三方签名证书

1.4配置重定向80端口转443端口

以上配置有个不好的地方,如果用户使用时忘了使用https或者443端口,那么将会报错,所以我们需要80端口的访问转到443端口并使用ssl加密访问。【生产环境中,用户也基本不可能用https去访问一个网站,所以实现跳转很有必要。】

只需要增加一个server段,使用301永久重定向。

[[email protected] key]# cat /application/nginx/conf/nginx.conf

user  nginx;

worker_processes 1;

error_log /opt/web/logs/error.log;

worker_rlimit_nofile 65535;

pid       logs/nginx.pid;

events {

use epoll;

worker_connections  65535;

}

http {

include       mime.types;

default_type application/octet-stream;

sendfile        on;

keepalive_timeout  65;

log_format  commonlog ‘$remote_addr - $remote_user [$time_local] "$request" ‘

‘$status $body_bytes_sent "$http_referer" ‘

‘"$http_user_agent""$http_x_forwarded_for"‘;

access_log  /opt/web/logs/access.log  commonlog;

server {

listen       80;

server_name  www.miaomiao.com;

rewrite ^/(.*) https://www.miaomiao.com/$1 permanent;

location /{

root   /opt/web/www.miaomiao.com;

index  index.html index.htm;

}

}

server {

ssl on;

ssl_certificate /application/nginx/conf/key/server.crt;

ssl_certificate_key /application/nginx/conf/key/server.key;

listen       443;

server_name  www.miaomiao.com;

location /{

root   /opt/web/www.miaomiao.com;

index  index.html index.htm;

}

}

}

1.5重启nginx生效

[[email protected] key]# /application/nginx/sbin/nginx -t

nginx: the configuration file/application/nginx-1.9.13/conf/nginx.conf syntax is ok

nginx: configuration file/application/nginx-1.9.13/conf/nginx.conf test is successful

[[email protected] key]# /application/nginx/sbin/nginx-s reload

时间: 2024-10-14 07:20:18

Nginx之Https最佳实践(跳转)的相关文章

阿里云 CDN HTTPS 最佳实践系列——动态证书(一)

背景 了解阿里云 CDN 架构的朋友应该知道,阿里云 CDN 7层的接入组件是 Tengine,我们知道 Tengine 原生是支持 SSL 的,只需要在配置文件中配置证书和私钥即可.在 CDN HTTPS 产品化以前,要开通 HTTPS 的域名需要把证书私钥给我们,我们在 Tengine 静态配置中配置,然后再同步到所有 CDN 边缘节点,显然这种方式在越来越多的域名开通 HTTPS 后,Tengine 静态配置文件会越来越大,难以管理,同时也会导致 Tengine reload 变得很慢,这

Nginx配置Https重定向 Chrome跳转到%2a.xxx.com的问题

今天配置Nginx的Https证书遇到了一个坑. 一般配置好证书后,都会配置一下https的重定向,让一般的http访问跳转到https访问去. 简单配置如下: server { listen 80; server_name www.sxsc.ltd sxsc.ltd stest.sxsc.ltd; return 301 https://$server_name$request_uri; } 配置好后,用chrome访问 www.sxsc.ltd 时,会莫名其妙跳转到 https://%2A.s

CDN HTTPS 最佳实践系列——HTTP/2(二)

背景 HTTP/2 是最新的 HTTP 协议,已于2015年5月份正式发布,Chrome. IE11.Safari 以及 Firefox 等主流浏览器已经支持 HTTP/2 协议.阿里云 CDN 在2016年7月份开始全网支持 HTTP/2,是国内第一家全网支持 HTTP/2 的 CDN 提供商. HTTP/2 是新技术,一些底层代码库在实现时可能不完善,在一些特殊场景下可能就出问题,我们遇到过一些 android 库实现有问题,导致开启 HTTP/2 就经常访问失败,关闭 HTTP/2 就完全

Nginx基础和最佳实践

来自Nginx公司的工程师介绍什么Ngnix,怎么安装nginx以及nginx+,主要的配置文件,命令和文件夹,也谈到了基本配置和高级配置选项,包括大量的配置选项和相关原理介绍,可以作为网站运维人员入门的参考,最后也谈到了日志和监控文件管理. 篇幅过长,原文链接https://www.slidestalk.com/s/nginx_basics_and_best_practices 原文地址:https://www.cnblogs.com/slidestalk/p/9782215.html

阿里云 CDN HTTPS 最佳实践——动态密钥套件(三)

背景 在 ssllabs 中可以测试域名的 SSL 安全等级: 影响这个测试等级的最主要因素就是密钥套件,在接入阿里云 CDN 的所有域名中,绝大多数域名评级都是 A,但是有少数域名为了兼容一些老浏览器或者客户端,需要支持比如 RC4 这样的加密算法,这样就导致评级为 B,但用户体验更重要,这就需要为这些对密钥套件有特殊需求的域名特殊配置密钥套件. 另外,当我们调试 https 时,比如抓包分析数据包时,发现应用数据都是加密的,无法分析 HTTP 协议的问题,但是如果我们有私钥,那就有办法可以通

nginx 线上那些实用的最佳实践

虽然公司小,但随着时间的推移各种需求,产线的复杂度逐渐增提升.原先一个线上项目只要解决跨域代理的问题,现在可能会解决各种问题.当没有运维或第三方的支持时,nginx 就由我们万能的前端来对接.何况前端本来就应该能 hold 它. Nginx 基础,可以参考 http://eminoda.github.io/2018/08/10/nginx-basic-learn/ 以下列出一些使用心得,如果有错误欢迎 issue API 接口统一代理 比如有个 3000 端口的 node 云服务,为了更好的管理

关于Nginx配置Https server后,乱跳的问题解决记录

大部分的服务器上,我们会在一个Nginx服务下配置多个vhost,以最大化运用服务器资源.然而,为其中一个vhost域名启用 HTTPS 之后,发现百度统计的实时访客或入口页中,存在一些来自其它域名的请求.即通过 https://some-other-domain.com/some-url 来访问对应的 https://www.domain.com/some-url 结果就是 Google 浏览器显示了一个安全警告页面,认为这是一个不安全的网页.因为我只配置了 www.domain.com 的

[1.30] 保持的力量:接口开发最佳实践

神啊,求你赐给我平静的心,去接受我无法改变的事:赐给我勇气,去做我能改变的事:赐给我智慧,去分辨两者的不同. --平静之祷 1.30.1 论保持的力量 追到一个心仪的女生不难,难于如何保持和培养一份真挚的感情:获得一时的财富也不难,难于如何长久保持收益:创业的公司很容易博得一时媒体的关注以及某次天使的投资,但难于如何排除各种障碍.充分利用各方资源发展成中企业及至上市公司. 同样,提供一时的接口很容易,但当我们需要不断为接口提供升级,以及当我们维护提供一整套接口时,面临的困难和问题会越来越大.所以

ngx_lua应用最佳实践

引子: 以下文字,是UPYUN系统开发工程师timebug在SegmentFault D-Day南京站技术沙龙上所做分享的内容要义提炼,主题为UPYUN系统开发团队在进行业务逻辑由C模块到ngx_lua的迁移过程中产生的心得体会,以及在NGINX上基于ngx_lua的方面的最佳实践方案. Upyun公众号:upaiyun --------------------------------------------------------------------- ngx_lua 是一个NGINX的第