主机环境: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分配给哪个进程,一般来说不用特殊指定。如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。eg:
worker_processes 4 #4核CPU
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会出现放置的图片