使用命令“yum install -y bind-utils”安装bind-utils工具,使用dig命令查看www.baidu.com域名对应的IP。
[root@yuioplvlinux-128 ~]# dig www.baidu.com
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17456
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1143 IN CNAME www.a.shifen.com.
www.a.shifen.com. 243 IN A 119.75.216.20
www.a.shifen.com. 243 IN A 119.75.213.61
;; Query time: 53 msec
;; SERVER: 119.29.29.29#53(119.29.29.29)
;; WHEN: 一 6月 11 23:48:05 CST 2018
;; MSG SIZE rcvd: 101
新建一个load.conf的配置文档,输入以下内容:
upstream baidu_com
{
ip_hash;
server 119.75.213.61:80;
server 119.75.216.20:80;
}
server
{
listen 80;
server_name www.baidu.com;
location /
{
proxy_pass http://baidu_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
和简单的代理有所不同,负载均衡多出来一个upstream,在这里定义后端的Web Server,可以是一个,也可以是多个。其中ip_hash为负载均衡的算法,它表示根据IP地址把请求分到不同的服务器上,比如用户S的IP为1.1.1.1,用户F的IP为3.3.3.3,则S访问的时候就会把请求转发到第一个Web Server上,而F访问的时候就会到第二个Web Server上。这种算法用在把session存到本机磁盘上的情况。
使用curl测试,刚开始不去加载,访问的结果是默认的虚拟主机,重新加载后,就访问到了百度主页;
[root@yuioplvlinux-128 vhost]# curl -x127.0.0.1:80 www.baidu.com
“This is a default site.”
[root@yuioplvlinux-128 vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@yuioplvlinux-128 vhost]# /usr/local/nginx/sbin/nginx -s reload
[root@yuioplvlinux-128 vhost]# curl -x127.0.0.1:80 www.baidu.com
百度一下,你就知道
HTTPS通信已经成为了一种趋势,简单讲,它就是一个加密的HTTP协议,如果HTTP通信的数据包在传输过程中被截获,就有可能破译这些数据包里的信息,它里面会包括一些用户名、密码、手机号等敏感的信息。而如果使用HTTPS通信,即使数据包被截获,也无法破译里面的内容。
其通信过程大致如下:
1)浏览器发送一个HTTPS请求给服务器;
2)服务器要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才能继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥;
3)服务器会把公钥传输给客户端;
4)客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机字符串,并用收到的公钥加密;
5)客户端把加密后的随机字符串传输给服务器;
6)服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串字符串后,再用这串随机字符串加密传输的数据(该加密为“对称加密”,即将数据和私钥,也就是这个随机字符串通过某种算法混合在一起,这样除非知道私钥,否则无法发获取数据内容);
7)服务器把加密后的数据传输给客户端;
8)客户端收到数据后,再用自己的私钥(也就是加密的随机字符串)解密。
可以在本机自己本机生成一个SSL证书文件,但不能用于生产环境中,具体配置过程如下:
[root@yuioplvlinux-128 ~]# cd /usr/local/nginx/conf
[root@yuioplvlinux-128 conf]# openssl genrsa -des3 -out tmp.key 2048
Generating RSA private key, 2048 bit long modulus
............................................................+++
............................+++
e is 65537 (0x10001)
Enter pass phrase for tmp.key:
Verifying - Enter pass phrase for tmp.key:
openssl命令如果没有,使用yum install -y openssl安装。这一步是生成key文件(通常称为:私钥),2048位加密字符串长度,会让我们输入一个密码,密码不能太短,否则不成功。
[root@yuioplvlinux-128 conf]# openssl rsa -in tmp.key -out yuioplv.key
Enter pass phrase for tmp.key:
writing RSA key
这一步是把刚刚生成的tmp.key再转换成yuioplv.key,目的是删除刚才设置的密码,如果key文件有密码,则必须在Nginx加载它的时候输入它的密码,因此很不方便。
fastcgi_params.default mime.types nginx.conf.default uwsgi_params.default
[root@yuioplvlinux-128 conf]# openssl req -new -key yuioplv.key -out yuioplv.csr
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
这一步是生成证书请求文件,这个并不是上文提到的公钥,但这个文件是必须要有的,我们要把key文件和这个CSR文件一起生成最终的公钥文件,其中Common Name为后面配置Nginx配置文件的server_name。后面这些信息是用来认证注册信息的,可以不用填写。
[root@yuioplvlinux-128 conf]# openssl x509 -req -days 365 -in yuioplv.csr -signkey yuioplv.key -out yuioplv.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key
这样最终才生成了CRT证书文件-yuioplv.crt。
编辑“vim /usr/local/nginx/conf/vhost/ssl.conf”文件,配置如下:
server
{
listen 443;
server_name dp.com;
index index.html index.php;
root /data/wwwroot/dp.com;
ssl on; #打开sll配置
ssl_certificate yuioplv.crt;
ssl_certificate_key yuioplv.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
保存配置文件后,检查配置是否有问题,出现以下错误是因为在编辑Nginx时,没有去配置支持SSL的参数,需要重新配置一遍Nginx。
[root@yuioplvlinux-128 conf]# /usr/local/nginx/sbin/nginx -t
nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/vhost/ssl.conf:7
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
切换至Nginx的安装文件目录下,执行以下配置命令:
[root@yuioplvlinux-128 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
然后“make”、“make install”;
编译完成后,重新加载,发现没有问题了。
[root@yuioplvlinux-128 nginx-1.14.0]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@yuioplvlinux-128 nginx-1.14.0]# /etc/init.d/nginx restart
Restarting nginx (via systemctl): [ 确定 ]
[root@yuioplvlinux-128 nginx-1.14.0]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 6324/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6324/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 835/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1112/master
tcp6 0 0 :::3306 :::* LISTEN 1007/mysqld
tcp6 0 0 :::22 :::* LISTEN 835/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1112/master
创建对应的目录和测试文件;
[root@yuioplvlinux-128 vhost]# mkdir /data/wwwroot/dp.com
[root@yuioplvlinux-128 vhost]# echo " /data/wwwroot/dp.com/1.php
[root@yuioplvlinux-128 vhost]# /etc/init.d/nginx restart
Restarting nginx (via systemctl): [ 确定 ]
在/etc/hosts中,新增一行配置:“127.0.0.1 dp.com”,使用curl测试,提示不被信任;
[root@yuioplvlinux-128 etc]# curl https://dp.com/1.php
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
也可在浏览器中访问,在Windows的host文件中,添加目录即可,在浏览中打开,提示如下:
这是因为证书是自己制作的,并没有得到浏览器的认可,如果想继续访问,可以点“高级”,然后点击“继续前往”即可,然后就可以访问网站内容了。