◆案例1◆ 编译安装Nginx
1.配置yum源,安装依赖
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum -y install epel-release yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.编译安装Nginx
useradd -s /sbin/nologin -M nginx wget http://nginx.org/download/nginx-1.13.12.tar.gz tar -xzvf nginx-1.13.12.tar.gz cd nginx-1.13.12/ ./configure --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_stub_status_module make && make install
3.启动-关闭-重启Nginx
/usr/local/nginx/sbin/nginx -t #检测配置文件正确性 /usr/local/nginx/sbin/nginx #启动Nginx kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid) #关闭Nginx kill -HUP $(cat /usr/local/nginx/logs/nginx.pid) #重启Nginx
◆案例2◆ Nginx-实现身份验证 -- 基于用户名密码的认证
1.编辑Nginx主配置文件
编辑配置文件,在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 41 #access_log logs/host.access.log main; 42 43 location / { #对根站点,设置密码认证 44 root html; #主页位置,相对路径 45 index index.html index.htm; #主页执行顺序 ★ auth_basic "welcome to admin"; #提示信息(自定义) ★ auth_basic_user_file /usr/local/nginx/html/login.pad; #生成的密码文件 46 } 47 48 #error_page 404 /404.html; 49 50 # redirect server error pages to the static page /50x.html
2.借助Apache的工具生成密码文件
yum install -y httpd htpasswd -c /usr/local/nginx/html/login.pad lyshark #创建认证用户(覆盖) htpasswd -m /usr/local/nginx/html/login.pad lyshark #写入认证用户(追加)
3.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆案例3◆ Nginx-实现身份验证 -- 基于IP的身份认证
1.编辑Nginx主配置文件
编辑配置文件,在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 41 #access_log logs/host.access.log main; 42 43 location / { 44 root html; 45 index index.html index.htm; ★ allow 192.168.1.10; #允许单个IP访问 ★ deny 192.168.1.10; #拒绝单个IP访问 ★ allow 0.0.0.0/0; #允许所有网段 ★ deny 0.0.0.0/0; #拒绝所有网段 46 } 47 48 #error_page 404 /404.html; 49 50 # redirect server error pages to the static page /50x.html
2.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆案例4◆ 配置Nginx虚拟主机(重点)
◆基于域名的虚拟主机◆ >>>实现一台服务器多个域名,搭建多个网站<<<
1.手动配置DNS<实验环境只做正向即可>
分别模拟两个域名 www.xdl.com和www.edu.com并解析到同一台主机上
2.编辑Nginx主配置文件
分别编辑两个主机区域,在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 35 server { #主机区域1(server1) 36 listen 80; ★ server_name www.xdl.com; #主机1服务器名(域名1) 38 39 location / { ★ root html/xdl; #域名1网页存放位置 41 index index.html index.htm; 42 } 43 error_page 500 502 503 504 /50x.html; 44 location = /50x.html { 45 root html; 46 } 47 } 48 server { #主机区域2(server2) 49 listen 80; ★ server_name www.edu.com; #主机2服务器名(域名2) 51 52 location / { ★ root html/edu; #域名2网页存放位置 54 index index.html index.htm; 55 } 56 57 error_page 500 502 503 504 /50x.html; 58 location = /50x.html { 59 root html; 60 } 61 }
3.在html目录下创建相应目录以及html文件
mkdir /usr/local/nginx/html/xdl/ mkdir /usr/local/nginx/html/edu/ echo "xdl server zone" > /usr/local/nginx/html/xdl/index.html echo "edu server zone" > /usr/local/nginx/html/edu/index.html
4.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆基于端口的虚拟主机◆ >>>实现一台服务器多个端口,搭建多个网站<<<
1.手动配置DNS<实验环境只做正向即可>
配置DNS解析 www.lyshark.com 解析到本机
2.编辑Nginx主配置文件
分别编辑两个主机区域,在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 35 server { #主机区域1(server1) ★ listen 80; #主机1端口 ★ server_name www.lyshark.com; #主机1服务器名(域名1) 38 39 location / { ★ root html/lyshark-80; #域名1网页存放位置 41 index index.html index.htm; 42 } 43 error_page 500 502 503 504 /50x.html; 44 location = /50x.html { 45 root html; 46 } 47 } 48 server { #主机区域2(server2) ★ listen 8080; #主机区域2端口 ★ server_name www.lyshark.com; #主机2服务器名(域名2) 51 52 location / { ★ root html/lyshark-8080; #域名2网页存放位置 54 index index.html index.htm; 55 } 56 57 error_page 500 502 503 504 /50x.html; 58 location = /50x.html { 59 root html; 60 } 61 }
3.在html目录下创建相应目录以及html文件
mkdir /usr/local/nginx/html/lyshark-80/ mkdir /usr/local/nginx/html/lyshark-8080/ echo "xdl server zone" > /usr/local/nginx/html/lyshark-80/index.html echo "edu server zone" > /usr/local/nginx/html/lyshark-8080/index.html
4.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆基于IP的虚拟主机◆ >>>实现一台服务器多个IP地址,搭建多个网站<<<
1.配置一个网卡子接口
[root@localhost conf]# ifconfig eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fe1e:14e2 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:1e:14:e2 txqueuelen 1000 (Ethernet) RX packets 40292 bytes 4129804 (3.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8962 bytes 1557264 (1.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777728:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.13 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:0c:29:1e:14:e2 txqueuelen 1000 (Ethernet)
2.编辑Nginx主配置文件
分别编辑两个主机区域,在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 35 server { ★ listen 192.168.1.12:80; #指定区域1的IP地址 37 server_name localhost; 38 39 location / { ★ root html/192.168.1.12; #指定区域1的文件目录 41 index index.html index.htm; 42 } 43 44 error_page 500 502 503 504 /50x.html; 45 location = /50x.html { 46 root html; 47 } 48 } 49 server { ★ listen 192.168.1.13:80; #指定区域2的IP地址 51 server_name localhost; 52 53 location / { ★ root html/192.168.1.13; #指定区域2的文件目录 55 index index.html index.htm; 56 } 57 58 error_page 500 502 503 504 /50x.html; 59 location = /50x.html { 60 root html; 61 } 62 }
3.在html目录下创建相应目录以及html文件
mkdir /usr/local/nginx/html/192.168.1.12/ mkdir /usr/local/nginx/html/192.168.1.13/ echo "ip 1 server" > /usr/local/nginx/html/192.168.1.12/index.html echo "ip 2 server" > /usr/local/nginx/html/192.168.1.13/index.html
4.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆案例5◆ 配置Nginx反向代理服务器
1.修改Nginx主配置文件
在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 41 #access_log logs/host.access.log main; 42 43 location / { 44 root html; #注释掉 45 index index.html index.htm; #注释掉 ★ proxy_pass http://192.168.1.100; #反向代理添加此处,当有人访问/时,自动转到100上 46 } 47 48 #error_page 404 /404.html; 49 50 # redirect server error pages to the static page /50x.html
2.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆案例6◆ Nginx实现简单的负载均衡
=====================================================================================
实验环境
Nginx负载均衡 192.168.1.12
Apache主机1 192.168.1.13
Apache主机2 192.168.1.14
实现效果
当用户访问Nginx负载均衡器时,Nginx将访问请求平均分配给后端的Apache服务器,实现负载均衡
=====================================================================================
1.修改Nginx主配置文件
在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 17 http { 18 include mime.types; 19 default_type application/octet-stream; 20 sendfile on; 21 keepalive_timeout 65; 22 ★在下处填写负载均衡语句 <语句应写在http语句内并且是在server语句外填写> ★ upstream lyshark.com { #自定义区域名 ★ ★ server 192.168.1.13:80 weight 1; #负载均衡主机web1 ★ server 192.168.1.14:80 weight 2; #负载均衡主机web2 ★ ★ server 192.168.1.15:80 weight 1 backup; ★ #backup表示机器处于热备状态,weight代表权重,权重越高使用越多! ★ } 31 32 server { 33 listen 80; 34 server_name localhost; 35 36 location / { ★ # root html; #注释掉 ★ # index index.html index.htm; #注释掉 ★ proxy_pass http://lyshark.com; #代理交给上面的自定义区域处理 40 } 41 42 error_page 500 502 503 504 /50x.html; 43 location = /50x.html { 44 root html; 45 } 46 } 47 }
2.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
◆案例7◆ Nginx实现https加密认证访问
1.安装软件依赖包
yum install -y pcre-devel zlib-devel openssl openssl-devel
2.建立服务器私钥,过程中需要输入密码
openssl genrsa -des3 -out server.key 1024 ---------------------------------------------------------------------------- 注释: Genrsa –des3 #加密类型 -out server.key #输出文件 -1024 #加密长度 ----------------------------------------------------------------------------
3.建立证书,生成的csr文件交给CA签名后形成服务端自己的证书
openssl req -new -key server.key -out server.csr ---------------------------------------------------------------------------- 注释: req -new #新建证书 -key server.key #私钥文件 -out server.csr #输出文件 注:依次输入:国家 省 市 组织 机构 全称 EMAIL 是否要改变密码 是否改名称 ----------------------------------------------------------------------------
4.转化成证书,这一步由证书CA机构来做的,这里只是实验.
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt
5.复制证书和密钥到Nginx目录下
cp -a server.key /usr/local/nginx/conf/server.key #复制密钥到conf目录下 cp -a servernew.crt /usr/local/nginx/conf/server.crt #复制证书到conf目录下
6.修改Nginx主配置文件
在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 33 #gzip on; 34 35 server { ★ listen 443; #修改端口为443 37 server_name localhost; 38 ★ ssl on; #开启SSL加密 ★ ssl_certificate server.crt; #证书位置 ★ ssl_certificate_key server.key; #密钥位置 ★ ssl_session_timeout 5m; #会话操作时间 ★ ssl_protocols TLSv1; #协议版本 ★ ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; #指定使用加密算法 ★ ssl_prefer_server_ciphers on; #缓存开启 46 47 location / { 48 root html; 49 index index.html index.htm; 50 } 51 52 #error_page 404 /404.html; 53 54 # redirect server error pages to the static page /50x.html
7.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
8.访问地址
https://127.0.0.1:443
◆案例8◆ Nginx实现域名跳转
=====================================================================================
实验效果
将地址 http://127.0.0.1/index.html
跳转到 http://59.110.167.239/index.html
=====================================================================================
1.修改Nginx主配置文件
在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 24 server { 25 listen 80; 26 server_name localhost; 27 28 #charset koi8-r; 29 30 #access_log logs/host.access.log main; 31 32 location / { ★ #root html; #注释掉 ★ #index index.html index.htm; #注释掉 35 ★ rewrite ^(.*)$ http://59.110.167.239 permanent; #实现地址全跳转(访问本机跳转到59.110.167.239上) ★ rewrite ^(.*)$ https://$host$1 permanent; #实现自身http到https的全跳转 37 } 38 39 #error_page 404 /404.html; 40 41 # redirect server error pages to the static page /50x.html
2.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
3.手动访问本机将跳转到指定地址
http://127.0.0.1/index.html
◆案例9◆ Nginx实现自身http到https的跳转配置
=====================================================================================
实验效果
用户访问http地址自动的跳转到https地址中去访问
访问地址 http://127.0.0.1/index.html
跳转到 https://127.0.0.1/index.html
=====================================================================================
1.安装软件依赖包
yum install -y pcre-devel zlib-devel openssl openssl-devel
2.建立服务器私钥,过程中需要输入密码
openssl genrsa -des3 -out server.key 1024
3.建立证书,生成的csr文件交给CA签名后形成服务端自己的证书
openssl req -new -key server.key -out server.csr
4.转化成证书,这一步由证书CA机构来做的,这里只是实验.
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt
5.复制证书和密钥到Nginx目录下
cp -a server.key /usr/local/nginx/conf/server.key #复制密钥到conf目录下 cp -a servernew.crt /usr/local/nginx/conf/server.crt #复制证书到conf目录下
6.修改Nginx主配置文件
在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 17 http { 18 include mime.types; 19 default_type application/octet-stream; 20 sendfile on; 21 keepalive_timeout 65; 22 23 server { 24 listen 80; 25 server_name localhost; 26 27 location / { ★ #root html; #注释掉 ★ #index index.html index.htm; #注释掉 ★ rewrite ^(.*)$ https://$host$1 permanent; #实现自身http到https的跳转 31 } 32 33 error_page 500 502 503 504 /50x.html; 34 location = /50x.html { 35 root html; 36 } 37 } 38 39 server { ★ listen 443; 41 server_name localhost; 42 ★ ssl on; #开启SSL加密 ★ ssl_certificate server.crt; #证书位置 ★ ssl_certificate_key server.key; #密钥位置 ★ ssl_session_timeout 5m; #会话操作时间 ★ ssl_protocols TLSv1; #协议版本 ★ ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; #指定使用加密算法 ★ ssl_prefer_server_ciphers on; #缓存开启 50 51 location / { 52 root html; 53 index index.html index.htm; 54 55 } 56 57 error_page 500 502 503 504 /50x.html; 58 location = /50x.html { 59 root html; 60 } 61 } 62 }
7.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
8.手动访问本机将跳转到指定地址
◆案例10◆ Nginx配置HSTS(提高安全性/了解即可)
1.在Https的Server站点添加如下头部
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
2.在Http的Server站点添加相应代码
return 301 https://$host;
3.添加X-Frame-Options头部, 确保不会嵌入到Frame 或 iframe,避免点击劫持
add_header X-Frame-Options "DENY";
4.测试方法
chrome://net-internals/
◆实战项目◆ 实现简单企业服务器环境(带HTTPS认证+负载均衡)
=====================================================================================
实验环境
Nginx 反向代理 192.168.1.10
Web1 后端Apache1 192.168.1.20
Web2 后端Apache2 192.168.1.30
实验效果
配置Nginx加密(SSL)传输数据
客户访问 http://www.lyshark.com
跳转到 https://www.lyshark.com
两台web服务器实现压力均摊
实验过程
首先做http到https的跳转
紧接着在做负载均衡
=====================================================================================
1.配置DNS服务器
DNS服务器解析道本机Nginx服务器上
Nginx 192.168.1.12 解析成 www.lyshark.com
2.配置两台Apache服务器
Web1 192.168.1.13 Web2 192.168.1.14
3.安装并配置Nginx
a)生成证书与私钥
openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt
b)复制证书和密钥到Nginx目录下
cp -a server.key /usr/local/nginx/conf/server.key cp -a servernew.crt /usr/local/nginx/conf/server.crt
4.修改Nginx主配置文件,实现https加密认证与负载均衡
在相应的区域中加入以下标★语句
vim /usr/local/nginx/conf/nginx.conf 1 worker_processes 1; 2 3 events { 4 worker_connections 1024; 5 } 6 7 8 http { 9 include mime.types; 10 default_type application/octet-stream; 11 sendfile on; 12 keepalive_timeout 65; 13 ===================================================================================== #在此处填写负载均衡语句(在http语句内,server语句外填写) ★ upstream lyshark.com { #自定义区域名 ★ ★ server 192.168.1.13:80; #均衡主机1 ★ server 192.168.1.14:80; #均衡主机2 ★ } ===================================================================================== 19 20 21 server { 22 listen 80; ★ server_name www.lyshark.com; #本机域名 24 25 location / { ★ #root html; #注释掉 ★ #index index.html index.htm; #注释掉 ★ rewrite ^(.*)$ https://$host$1 permanent; #将http请求跳转到https 29 } 30 31 error_page 500 502 503 504 /50x.html; 32 location = /50x.html { 33 root html; 34 } 35 } 36 37 server { ★ listen 443; #修改端口 ★ server_name www.lyshark.com; #本机域名 40 ===================================================================================== ★ ssl on; #开启SSL加密 ★ ssl_certificate server.crt; #证书位置 ★ ssl_certificate_key server.key; #密钥位置 ★ ssl_session_timeout 5m; #会话操作时间 ★ ssl_protocols TLSv1; #协议版本 ★ ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; #指定使用加密算法 ★ ssl_prefer_server_ciphers on; #缓存开启 ===================================================================================== 48 49 location / { ★ #root html; #注释掉 ★ #index index.html index.htm; #注释掉 ★ proxy_pass http://lyshark.com; #实现地址跳转,有80的请求转443 53 } 54 55 error_page 500 502 503 504 /50x.html; 56 location = /50x.html { 57 root html; 58 } 59 } 60 }
5.重启Nginx服务
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
6.手动访问本机将跳转到指定地址
http://127.0.0.1/index.html
◆附加◆
开启nginx监控模块
写入 (约在47行) location /lyshark { #查看时输入:http://*/lyshark stub_status on; }
源码编译修改版本号
vim nginx-1.13.12/src/core/nginx.h #define nginx_version 1013012 #define NGINX_VERSION "1.13.12" #define NGINX_VER "nginx/" NGINX_VERSION 修改版本后保存编译即可