Nginx 的功能实现——基于Rhel7.3系列

主机环境:rhel7.3 selinux and firewalld disabled

主机名 ip 服务
server1 172.25.26.1 nginx
server2 172.25.26.2 nginx

一、7系列的Nginx安装

1.获得资源,解压(基础配置)
在这里插入图片描述

[root@server1 ~]# tar zxf nginx-1.15.9.tar.gz 
[root@server1 ~]# ls

在这里插入图片描述

[root@server1 cc]# pwd
/root/nginx-1.15.9/auto/cc
[root@server1 cc]# vim gcc	#注释日志级别
[root@server1 core]# pwd
/root/nginx-1.15.9/src/core
[root@server1 core]# vim nginx.h	#屏蔽版本
14 #define NGINX_VER          "nginx/"
[root@server1 nginx-1.15.9]# yum install gcc pcre-devel openssl-devel -y 	#安装编译准备和解决依赖性

2.进行编译,安装

[root@server1 nginx-1.15.9]# ./configure --prefix=/usr/local/nginx  --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module

注意:会出现./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.报错

[root@server1 ~]# yum list gd #查看版本(从而找到资源)
在这里插入图片描述

[root@server1 ~]# yum install gd-devel-2.0.35-26.el7.x86_64.rpm -y
重新进行编译
[root@server1 nginx-1.15.9]# make && make install
[root@server1 nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

3.对配置文件进行基础设置

root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
 2 user  nginx nginx;
 3 worker_processes  auto;
[root@server1 conf]# id nginx
id: nginx: no such user
[root@server1 conf]# useradd nginx
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx

二、如何给配置文件加高亮显示

[root@server1 conf]# cd		#必须切换到主目录下
[root@server1 ~]# mkdir .vim
[root@server1 contrib]# pwd
/root/nginx-1.15.9/contrib
[root@server1 contrib]# cp -r vim/* ~/.vim
[root@server1 contrib]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf

在这里插入图片描述

  • 如何查看nginx的版本和编辑加载过的模块
[root@server1 ~]# nginx -V		#查看版本和加载过的模块
nginx version: nginx/	#此处因为安装前屏蔽了版本
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module
[root@server1 ~]# nginx -v	#查看版本
nginx version: nginx/	#此处因为安装前屏蔽的版本
  • nginx的配置文件参数复习
#Nginx的worker进程运行用户以及用户组
user  nobody nobody;

#Nginx开启的进程数,建议为CPU的核数
worker_processes  1;
#worker_processes auto;

#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用01指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。eg:
worker_processes 4     #4CPU 
worker_cpu_affinity 0001 0010 0100 1000

#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
error_log  logs/error.log  info;

#指定进程ID存储文件位置
#pid        logs/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
#vim /etc/security/limits.conf
#  *                soft    nproc          65535
#  *                hard    nproc          65535
#  *                soft    nofile         65535
#  *                hard    nofile         65535
worker_rlimit_nofile 65535;  

三、nginx的日志切割(日志打包)

在nginx开启的时候,日志为空
在这里插入图片描述

在真机进行压测后查看日志:

[root@foundation26 ~]# ab -c 1 -n 10000 http://172.25.26.1/index.html

[root@server1 logs]# cat access.log #会发现日志内容(全是200)
在这里插入图片描述

注意:200表示正常; 503表示服务器端不可用

  • 对日志进行切割
  • 如何实现对企业中前一天的日志进行打包?
[root@server1 logs]# mv access.log `date +%F -d -1day`_access.log
[root@server1 logs]# ls
2019-04-23_access.log  error.log  nginx.pid
[root@server1 logs]# nginx -s reopen	#会重新生成日志
[root@server1 logs]# ls
2019-04-23_access.log  access.log  error.log  nginx.pid
[root@server1 logs]# cat access.log		#为空
注意:当再次在真机进行压测时,日志会重新生成在access.log

四、Nginx 的 IO 多路复用

概念及其原理:
参考:https://www.cnblogs.com/mingaixin/p/5432716.html
https://www.jianshu.com/p/6a6845464770

1.修改配置文件

root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
 12 events {
 13     use epoll;	#io多路复用
 14     worker_connections  1024;
 15 }
	#limit_conn_zone 用来限制同一时间连接数,即并发限制
	#limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法"leakyt bucket"
	#zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
	#定义一个名为addr的limit_conn_zone $binary_remote_addr是限制同一客户端的IP地址
 35         limit_conn_zone $binary_remote_addr zone=addr:10m;
 36         limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
 48         location /download {
 49                 limit_conn addr 1;	#同一个时候只能1个并发
 50 }

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload
[root@server1 logs]# >access.log 
[root@server1 logs]# cat access.log	#空
测试:在真机进行压力测试(日志查看会发现同一IP访问的某些会503):
[root@foundation26 ~]# ab -c 10 -n 1000 http://172.25.26.1/download/vim.jpg

在这里插入图片描述

注意:因为限制并发数为1,所以此处以10个作实验时,会出现报错
在这里插入图片描述

五、图片压缩

[root@server1 modules]# pwd
/usr/local/nginx/modules
[root@server1 modules]# ls
ngx_http_image_filter_module.so		#编译的时候安装的过滤模块路径
[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
  1 load_module modules/ngx_http_image_filter_module.so;
 49         location /download {
 50                 limit_conn addr 1;
 51                 image_filter resize 150 100;
 52 }

在这里插入图片描述
在这里插入图片描述

[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

在这里插入图片描述

测试:

浏览器输入172.25.26.1/download/vim.jpg(F12操作下进入Network标签下F5刷新会发现图片大小显示12.88kb)
在这里插入图片描述

六、访问限速

1.修改配置文件

root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
 49         location /download {
 50                 limit_conn addr 1;
 51                 limit_rate 50k;
 52                 image_filter resize 150 100;
 53 }
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

测试:

在真机里面进行压测,会发现速度受到限制
[root@foundation26 ~]# ab -c 10 -n 1000 http://172.25.26.1/download/vim.jpg
在这里插入图片描述

七、Nginx 反向代理的实现

server2作为反向代理服务器(安装nginx)
在这里插入图片描述

搭建步骤:

1.修改作为web服务器server1的nginx

[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
 37     server {
 38         listen       80;
 39         server_name  localhost;
 40         set_real_ip_from 172.25.26.2;	#设置可以获得真实IP的代理端地址
 41         real_ip_header X-Forwarded-For;	#获得客户端访问代理的请求报文头获得真实IP
 42         real_ip_recursive on;		#打开获取功能

在这里插入图片描述

2.修改用来做反代的server2的nginx配置文件

[root@server2 conf]# pwd
/usr/local/nginx/conf
[root@server2 conf]# vim nginx.conf
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20         upstream westos {
 21                 server 172.25.26.1:80;
 22 }
119 server {			#添加虚拟主机
120         listen 80;
121         server_name www.westos.org;
122 
123         location / {
124                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
125                 proxy_pass http://westos;
126         }
127 }

在这里插入图片描述
在这里插入图片描述

3.检测语法错误,重新加载配置

[root@server2 conf]# nginx -t
[root@server2 conf]# nginx -s reload
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload
[root@server1 html]# pwd
/usr/local/nginx/html
[root@server1 html]# rm -rf index.html 
[root@server1 html]# vim index.html
[root@server1 html]# cat index.html 
server1

测试:

在真机里写入解析,curl www.westos.org会发现访问的是代理,但获得的内容是server1:nginx作为web服务器
[root@foundation26 ~]# vim /etc/hosts
172.25.26.2 www.westos.org
在这里插入图片描述

注意:也可以在server1的nginx的日志里看到访问信息
在这里插入图片描述

八、Nginx 实现https加密

1.修改配置文件,将注释的加密模板打开,进行修改

[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
 40         #set_real_ip_from 172.25.26.2;
 41         #real_ip_header X-Forwarded-For;
 42         #real_ip_recursive on;
107     server {
108         listen       443 ssl;
109         server_name  localhost;
110 
111         ssl_certificate      cert.pem;
112         ssl_certificate_key  cert.pem;
113 
114         ssl_session_cache    shared:SSL:1m;
115         ssl_session_timeout  5m;
116 
117         ssl_ciphers  HIGH:!aNULL:!MD5;
118         ssl_prefer_server_ciphers  on;
119 
120         location / {
121             root   /web;
122             index  index.html index.htm;
123         }
124     }
125 
126 }

在这里插入图片描述
在这里插入图片描述

2.创建配置文件里添加的信息文件
在这里插入图片描述

3.生成加密证书

[root@server1 certs]# pwd
/etc/pki/tls/certs
[root@server1 certs]# ls
ca-bundle.crt  ca-bundle.trust.crt  make-dummy-cert  Makefile  renew-dummy-cert
[root@server1 certs]# make cert.pem
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:Linux
Common Name (eg, your name or your server's hostname) []:server1	#加密主机hostname
Email Address []:root@www.westos.org
[root@server1 certs]# cp cert.pem /usr/local/nginx/conf/	#将证书复制到nginx的配置文件目录下
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

测试:

在真机里写入解析
[root@foundation26 ~]# vim /etc/hosts
#172.25.26.2 www.westos.org
172.25.26.1 www.westos.org
浏览器里输入https://www.westos.org/在添加证书后可以看到信息
在这里插入图片描述
在这里插入图片描述
[root@server1 conf]# netstat -antlp #可以看到443端口被打开
在这里插入图片描述

九、Nginx 的重定向

目前访问www.westos.org需要加密时,需要手动https://www.westos.org
目的:让访问www.westos.org自动被加密

1.修改配置文件

[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
109         server_name  localhost;
120         location / {
121             root   /web;
122             index  index.html index.htm;
123         }
124     }
125 server {
126         listen 80;
127         server_name www.westos.org;
128         rewrite ^/(.*)$ https://www.westos.org/$1;
129 }
130 }

在这里插入图片描述

[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

浏览器输入www.westos.org会自动加密,定向到https://www.westos.org
在这里插入图片描述
[root@foundation26 ~]# curl -I www.westos.org #302临时重定向
在这里插入图片描述

  • 永久重定向的设置
[root@server1 conf]# vim nginx.conf
128         rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

在这里插入图片描述

测试:
[root@foundation26 ~]# curl -I www.westos.org
在这里插入图片描述

  • 不同域名的重定向
[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
109         server_name  www.westos.org bbs.westos.org;
121             root   /bbs;
128         #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
129         rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;		#以bbs结尾的重定向
[root@server1 conf]# mkdir /bbs
[root@server1 conf]# vim /bbs/index.html
[root@server1 conf]# cat /bbs/index.html 
<h1>bbs.westos.org</h1>
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

在这里插入图片描述

在这里插入图片描述

测试:真机里添加解析
[root@foundation26 ~]# vim /etc/hosts
172.25.26.1 www.westos.org bbs.westos.org

浏览器输入www.westos.org/bbs后添加证书,会重定向到https://bbs.westos.org/index.html会看到/bbs里的内容
在这里插入图片描述

在这里插入图片描述

  • 不同域名访问同一资源
[root@server1 conf]# vim nginx.conf
125 server {
126         listen 80;
127         server_name www.westos.org bbs.westos.org;
128         #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
129         #rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;
130         if ($host = "bbs.westos.org"){
131                 rewrite ^(/.*)$ http://www.westos.org/bbs/$1 permanent;
132 }
133         location / {
134         root /web;
135         index index.html;
136 }
133 }
134 }

在这里插入图片描述

[root@server1 web]# cp -r /bbs/ .
[root@server1 web]# ls
bbs  index.html
[root@server1 web]# nginx -t
[root@server1 web]# nginx -s reload

在这里插入图片描述

测试:
访问bbs.westos.org会定向到http://www.westos.org/bbs//
在这里插入图片描述

访问www.westos.org会访问/web下
在这里插入图片描述

十、盗链现象及其防止措施

环境设置:让server2作为web服务器盗链server1的资源

1.修改配置文件

[root@server2 conf]# vim nginx.conf
 20 #       upstream westos {
 21 #               server 172.25.26.1:80;
 22 #}
119 server {
120         listen 80;
121         server_name daolian.westos.org;
122         charset utf-8;
123         location / {
124                 root /web;
125                 index index.html;
126         }
127 }
128 }

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.将资源创建,修改配置文件

[root@server1 conf]# cd /usr/local/nginx/html/download/
[root@server1 download]# ls
vim.jpg
[root@server1 download]# mv vim.jpg /web/
[root@server1 conf]# pwd
/usr/local/nginx/conf
[root@server1 conf]# vim nginx.conf
130 #       if ($host = "bbs.westos.org"){
131 #               rewrite ^(/.*)$ http://www.westos.org/bbs/$1 permanent;
132 #}

在这里插入图片描述
3.两边同时重新加载配置

[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload
[root@server2 conf]# nginx -t
[root@server2 conf]# nginx -s reload

测试:修改真机解析
[root@foundation26 ~]# vim /etc/hosts
172.25.26.2 daolian.westos.org
172.25.26.1 www.westos.org bbs.westos.org

浏览器输入daolian.westos.org会盗链到server1的资源
在这里插入图片描述

  • 如何防止盗链?

1.在server1上修改配置文件

[root@server1 conf]# vim nginx.conf
133         location / {
134         root /web;
135         index index.html;
136 }
137 location ~* \.(gif|jpg|png|jpeg)$ {
138                 root    /web;
139                 valid_referers none blocked www.westos.org;
140                 if ($invalid_referer) {
141                         return 403;
142                 }
143         }
144 }
145 }
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

在这里插入图片描述

测试:浏览器输入daolian.westos.org此时会看不见内容
在这里插入图片描述

  • 如何让盗链者看到自己指定的内容
[root@server1 conf]# vim nginx.conf
125 server {
126         listen 80;
127         server_name www.westos.org;
137 location ~* \.(gif|jpg|png|jpeg)$ {
138                 root    /web;
139                 valid_referers none blocked www.westos.org;
140                 if ($invalid_referer) {
141                         #return 403;
142                         rewrite ^/ http://bbs.westos.org/daolian.jpg;
143                 }
144         }
145 }
146 server {
147         listen 80;
148         server_name bbs.westos.org;
149         location / {
150                 root /bbs;
151                 index index.html;
152 }
153 }
154 }

在这里插入图片描述

[root@server1 bbs]# pwd
/bbs
[root@server1 bbs]# ls
hello.jpg  index.html
[root@server1 bbs]# mv hello.jpg daolian.jpg
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload

测试:浏览器输入daolian.westos.org会出现放置的图片
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44209804/article/details/89489940