nginx如何配置称为https服务器 ngx_http_ssl_module模块:---ssl功能仅能够基于ip地址来实现,如果只有一个ip却有多个server,只能有一个是基于ssl的 ssl的交互过程:1、三次握手2、服务端发送证书给客户端,并发送支持的加密方式等等3、客户端接收证书,选择验证方式,验证后选择一次性会话密钥,用对方的公钥加密传给服务器,完成密钥交换4、服务端就可以使用这个密码来加密客户端请求的url资源 1、ssl on | off; Enables the HTTPS protocol for the given virtual server. 2、ssl_certificate file; 当前虚拟主机使用PEM格式的证书文件; 3、ssl_certificate_key file; 当前虚拟主机上与其证书匹配的私钥文件; 4、ssl_protocols [SSLv2][SSLv3][TLSv1][TLS1.1][TLS1.2]; 支持ssl协议版本,默认为后三个; 5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有; [shared:name:size]:在各worker之间使用一个共享的缓存;这种比较好,官方文档中,以字节为单位,1m内存可以缓存4000个会话 6、ssl_session_timeout time; 客户端一侧的连接可以复用ssl session cache中缓存的ssl参数的有效时长;

配置示例:
	server {
		listen 443 ssl;
		server_name www.magedu.com;
		root /vhosts/ssl/htdocs;
		ssl on;
		ssl certificate /etc/nginx/ssl/nginx.crt;
		ssl_certificate_key /etc/nginx/ssl/nginx.key;
		ssl_session_cache shared:sslcache:20m;
	}

如何创建一个ca服务器 cd /etc/pki/CA/ (umask 077;openssl genrsa -out private/cakey.pem 2048)---创建私钥,保存在private/cakey.pem---2048密钥长度 openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365---365天验证期限,会弹出一个对话,输入证书的内容 touch index.txt echo 01 > serial

然后nginx服务器申请证书文件: mkdir /etc/nginx/ssl (umask 077;openssl genrsa -out nginx.key 2048) openssl req -new -x509 -key nginx.key -out nginx.csr---证书接入请求 scp nginx.csr 172.168.0.68:/tmp---放在CA服务器上

CA服务器 openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365 scp certs/nginx.crt 172.16.0.67:/etc/nginx/ssl

nginx服务器:编辑nginx配置文件 server { listen 443 ssl; ssl on; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2 ssl_session_cache shared:SSL:10m; } 访问这个网站会提示不是私密连接

ngx_http_rewrite_module模块:---url重定向(这个域名不存在,或者是访问http80重定向到https443端口)其实就是查找替换 The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects,and conditionally select configurations.

bbs.magedu.com/ -->www.magedu.com/bbs/,http://www.magedu.com/-->https://www.magedu.com/ http://www.magedu.com/login.php;username=tom-->http://www.magedu.com/tom/

将用户请求的URI基于regex所描述的模式进行检查,而后完成替换; 1、rewrite regex replacement[flag]---url重定向以后,会拿新url重新匹配整个配置文件的规则 将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为热捧;acement指定的新的URI; 注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制; 如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端; 301:永久重定向; [flag]:---标志位,last和break直接由nginx内部完成,客户端无需参与 last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环; break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其他配置,结束循环; redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;临时重定向200响应码,需要客户端重新发请求,会看到一个新url permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;永久重定向301响应码,需要客户端重新发请求,会看到一个新url

示例: server { #rewrite /(.).png$ /$1.jpg;---前边是正则表达式,需要转意,把所有访问.png改为访问.jpg $1表示前边的 rewrite /(.)$ https://www.ilinux.io/$1; }

2、return return code [text]; return code URL; return URL;

Stop processing and returns the specified code to a client.

3、rewrite_log on | off; 是否开启重写日志; 4、if{condition}{...} 引入一个新的配置上下文;条件满足时,执行配置块中的配置指令;server,location;

condition:
	比较操作符:
		==
		!=
		~:模式匹配,区分字符大小写
		~*:模式匹配,不区分字符大小写
		!~:模式不匹配,区分字符大小写;
		!-*:模式不匹配,不区分字符大小写;
	文件及目录存在性判断:
		-e,!-e
		-f,!-f
		-d,!-d
		-x,!-x

5、set $variable value; 用户自定义变量

ngx_http_referer_module模块:防盗链 The ngx_http_refer_module module is used to block access to a site for requests with invalid values in the "Referer" header field. 1、valid_referers none | blocked | server_names | string ...;---合法引用 定义referer首部的合法可用值; none:请求报文首部没有referer首部; blocked:请求报文的referer首部没有值;---代理服务器有可能删除 server_names:参数,其可以有值作为主机名或主机名模式; arbitrary_string:直接字符串,但可使用作通配符; regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如~..magedu.com; 配置示例: valid_referers none block server_names .magedu.com .mageedu.com magedu. mageedu. ~.magedu.; if($invalid_referer) { return 403;---还可以返回到主页 }