一、Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。 HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。 HTTPS和HTTP的区别主要如下: 1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 二、使用openssl生成证书 openssl是目前最流行的SSL密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS协议的实现。 比如生成到:/usr/local/ssl openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt 生成过程: # openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /u sr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crtGenerating a 2048 bit RSA private key...............................................................................+ ++...............+++writing new private key to '/usr/local/ssl/nginx.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:beijingLocality Name (eg, city) [Default City]:beijingOrganization Name (eg, company) [Default Company Ltd]:xxxxOrganizational Unit Name (eg, section) []:xxxxCommon Name (eg, your name or your server's hostname) []:xxxx(一般是域名)Email Address []:xxxx@xxxx.com# lltotal 8-rw-r--r--. 1 root root 1391 Apr 21 13:29 nginx.crt-rw-r--r--. 1 root root 1704 Apr 21 13:29 nginx.key 三、Nginx安装http_ssl_module模块 Nginx如果未开启SSL模块,配置Https时提示错误。 nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:xxx
nginx缺少http_ssl_module模块,编译安装的时候带上--with-http_ssl_module配置就行了。 本场景是服务器已经安装过nginx,但是未安装http_ssl_module。 1.进入到源码包,如: cd /app/download/nginx-1.12.2 2.configure: ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module#可能需要的依赖包yum -y install pcre-devel openssl openssl-devel 3.make: 4.不需要执行make install,否则就覆盖安装了。 5.备份原有的nginx,如: cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak 6.然后将刚刚编译好的nginx覆盖掉原有的nginx(nginx需要停止) cp ./objs/nginx /usr/local/nginx/sbin/ 7.查看安装情况: /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.2built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module 四、nginx配置https 贴部分配置信息: server { listen 80; server_name www.yourdomain.com; rewrite ^(.*) https://$server_name$1 permanent; #http 跳转 https } server { listen 443 ssl; server_name www.yourdomain.com; ssl_certificate /usr/local/ssl/nginx.crt; ssl_certificate_key /usr/local/ssl/nginx.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; #禁止在header中出现服务器版本,防止黑客利用版本漏洞攻击 server_tokens off; #如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问 fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; access_log /usr/local/nginx/logs/httpsaccess.log;} 先检验配置的对不对: /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful 重启nginx: /usr/local/nginx/sbin/nginx -s reload 访问: 

下载地址: Nginx已编译的nginx-添加新模块 详解Nginx启动失败的几种错误处理 |