文章目录
- Nginx原理及基于配置文件的实验搭建
- 一.引子
- 二.Nginx的工作方式和作用
- 三.Nginx基于配置文件的实验搭建
- 1、源码安装Nginx及主配置文件详解
- 2.Nginx访问控制列表
- 3、虚拟主机:
- 4、反向代理(服务器端的代理)
- 5、七层负载均衡
- 6、HTTPS加密访问:
- 7、HTTPS会话卸载:
- 8、地址跳转:
- 9、获取真实服务器地址
- 10、缓存设置:
- 11、Nginx 反向代理让缓存失效怎么配置:
- 12、Nginx开启压缩:
Nginx原理及基于配置文件的实验搭建
一.引子
Nginx整理的内容相对于apache会比较多一点,apache时web服务器里的老大哥了,nginx这个后起之秀从诞生开始就就是为了取代老大哥的。但是大哥虽老,余威犹在,apache稳定安全的性能依旧是它的护城河。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
二.Nginx的工作方式和作用
1.Nginx的工作方式
一个管理进程 多个工作进程 一个工作进程管理多个线程 每个线程维持一个连接
2.Nginx的作用
a.反向代理
b.负载均衡
c.HTTP服务器
d.正向代理
三.Nginx基于配置文件的实验搭建
1、源码安装Nginx及主配置文件详解
a.下载软件包:
nginx-1.13.8.tar
openssl-1.0.2h.tar
b.安装依赖软件:
yum -y install pcre-devel zlib-devel openssl-devel openssl zlib pcre gcc*
tar -zxvf nginx-xxx
tar -zxvf openssl-xxx
c. cd nginx-1.13.8
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-openssl=/root/openssl-1.0.2h --with-stream
d.make && make install
e.主配置文件”:
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; 指定工作进程数
worker_connections 1024; 一个工作线程能开启1024个线程,最大为65535
sendfile on; 高效传输文件模式
keepalive_timeout 65; 超时时间65s
#gzip on; 开启压缩
f.测试:
/usr/local/nginx/sbin/nginx -t
g.重启服务:
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
h.http://192.168.21.12/nginx-status
Active connections: 1 :对后端发起的活动连接数
accepts handled requests 处理链接数 成功的握手数 请求次数
Reading: 0 Writing: 1 Waiting: 0 同步信息 返回给客户端的同步信息 等待下一次处理请求还有多久
2.Nginx访问控制列表
(1)基于用户名和密码的访问控制
a.安装软件包:(桌面版已有)
yum -y install httpd-utils
b.创建登录用户:
htpasswd -c /usr/local/nginx/html/a.psd hongfu
c.打开主配置文件:查看location区域
vim /usr/local/nginx/conf/nginx.conf
d.检测:
/usr/local/nginx/sbin/nginx -t
报错,创建系统用户
e.创建系统用户:
useradd -s /sbin/nologin -M nginx
f.启动服务:(如遇到报错,将占用80端口的进程杀死)
/usr/local/nginx/sbin/nginx start
cd /usr/local/nigix/html/
mkdir hongfu
echo “hongfu index page” >hong/index.html
g.当访问/hongfu路径下:
vim /usr/local/nginx/conf/nginx.conf
h.重启服务,并用浏览器访问服务器IP
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
(2).基于IP地址的访问控制
a.vim /usr/local/nginx/conf/nginx.conf
echo “hongfu” > index.html
b.在windows浏览器上测试两个IP的放行状态
3、虚拟主机:
使多个网站在同一台Nginx服务器上,节约大量资源
测试地址
www,hongfu.com:80
www.hongfiu.com:8080
www.qianqian.com:80
www.qianqian.com:8080
a.cd /usr/local/nginx/conf/
b.还原模板:
cp -a nginx.conf.default nginx.conf
c.主配置文件:(添加四个区域)
vim nginx.conf
d.创建目录:
cd /usr/local/nginx/html
mkdir hongfu-80 hongfu-8080 qianqian-80 qianqian-8090
echo “hongfu-80,123” > hongfu-80/index.html
echo “hongfu-8080,456” > hongfu-8080/index.html
echo “qianqian-80,123” > qianqian-80/index.html
echo “qianqian-8090,456” > qianqian-8090/index.html
e.重启服务:
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
f.修改windows文件添加域名和IP,并使用本地浏览器访问:
windows hosts 文件路径:C:\Windows\System32\drivers\etc\hosts
4、反向代理(服务器端的代理)
作用:作为替身,让后端真实服务器更加安全
a.开启一台源码安装的apache(另一台虚拟机):
cd /usr/local/apache2/htdocs
echo “apache server 123” > index.html
b.启动apache:
/usr/local/apache2/bin/apachectl start
c.换12再打开nginx配置文件:
cd /usr/local/nginx/conf/
d还原模板:
cp -a nginx.conf.default nginx.conf
vim /usr/local/nginx/conf/nginx.conf
e.重启服务并使用本机电脑访问:
useradd nginx -s /sbin/nologin -M :创建用户
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
5、七层负载均衡
目的:平衡后端apache负载压力
11测试机 12nginx 13apache 14apache
准备工作:
11做为客户端访问;
12作为nginx服务器端;
13作为后台处理器;
14作为后台处理器;
a.开启13、14的apache服务:
service httpd start
修改14的端口为1234:
vim /etc/httpd/conf/httpd.conf
Listen:1234
b.12服务器端还原模板:
cp -a nginx.conf.default nginx.conf
c.打开主配置文件:
vim nginx.conf
upstream 区域写在http区域以内,server区域以外
(写自己服务器的IP)
upstream atguigu.com {
server 192.168.1.240:80 weight 2;
server 192.168.1.241:80 weight 1;
server 192.168.1.242:80 weight 1 backup;(备份)
}
location / {
proxy_pass http://atguigu.com;
}
d.检测:
/usr/local/nginx/sbin/nginx -t
e.开启nginx服务:
/usr/local/nginx/sbin/nginx
f.检测
6、HTTPS加密访问:
a.创建私钥:
openssl genrsa -des3 -out server.key 1024
b.创建公钥:
openssl req -new -key server.key -out server.csr
c.创建证书:
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
d.移动到默认路径下:
mv server.key server.crt server.csr /usr/local/nginx/conf/
/usr/local/nginx/conf/Ngnix 默认在此目录下访问文件
e.服务器端还原模板:
cp -a nginx.conf.default nginx.conf
f.打开主配置文件:
vim nginx.conf
server {
listen 443;
server_name www.qian.com;
ssl on;
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;
7.重启服务并使用windows浏览器检测:
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
7、HTTPS会话卸载:
前端C-N:https协议
后端N-A:http
目的:节省https加密所需要的资源
准备工作:
11做为客户端访问;
12作为nginx服务器端;
13作为后台处理器;
14作为后台处理器;
a.开启13、14的apache服务:
service httpd start
修改14的端口为1234:
vim /etc/httpd/conf/httpd.conf
Listen:1234
b.修改配置文件
vim /usr/local/nginx/conf/nginx.conf
c.重启服务并用本机浏览器做测试:
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
8、地址跳转:
目的:隐藏真实服务器地址
a.还原模板:
cp -a nginx.conf.default nginx.conf
b.vim nginx.conf
rewrite区域:
#www.hongfu.com 80>443
server {
listen 80;
server_name www.hongfu.com;
location / {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
#www.hongfu.com 443 vhost
server {
listen 443;
server_name www.hongfu.com;
ssl on;
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;
c.检测:
echo “hongfu” > /usr/local/ngnix/sbin/ngnix/html
/usr/local/nginx/sbin/nginx -t
d.重启:
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
/usr/local/nginx/sbin/nginx
e.子目录下的地址跳转
cd /usr/local/nginx/html
mkdir dianqin/2020/ -p
echo “2020” > dianqin/2020/index.html
useradd -s /sbin/nologin -M nginx
f.vim /usr/local/nginx/conf/nginx.conf
mv dianqin/ huodong
pkill ngnix
/usr/local/nginx/sbin/nginx
9、获取真实服务器地址
目的:反向代理无法获取真实服务器地址
前端nginx后端apache
a.开启源码apache:
cd /usr/local/apache2/htdocs
echo “apache123” > index.html
b.配置nginx文件:
vim /usr/local/nginx/conf/nginx.conf (地址跳转)
c.开启nginx:
/usr/local/nginx/sbin/nginx
d.查看Apache端的日志文件:得到的是代理服务器地址
e.安装第三方模块:
rz -e
mod_rpaf-0.6.0.tar.gz
tar -zxf mod_rpaf-0.6.0.tar.gz
cd mod_rpaf-0.6.0
f.编译:
sed -i ‘s/remote_addr/client_addr/’ mod_rpaf-2.0.c
sed -i ‘s/remote_ip/client_ip/’ mod_rpaf-2.0.c
/usr/local/apache2/bin/apxs -i -c -n mod_rpaf-2.0.slo mod_rpaf-2.0.c
g.打开主配置文件:
vim /usr/local/apache2/conf/httpd.conf
添加在incloud区域
Include conf/extra/httpd-rpaf.conf
h.添加模块信息:
vim /usr/local/apache2/conf/extra/httpd-rpaf.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 192.168.21.12
RPAFheader X-Forwarded-For
i.重启服务:
/usr/local/apache2/bin/apachectl restart
j.修改nginx主配置文件:
vim /usr/local/nginx/conf/nginx.conf
location / {
proxy_pass http://192.168.21.13:80;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
k.检测:
/usr/local/nginx/sbin/nginx -t
l.重启nginx并删除日志文件:
pkill nginx && rm -rf client_body_temp/ scgi_temp/ uwsgi_temp/ proxy_temp/ fastcgi_temp/ && /usr/local/nginx/sbin/nginx10、缓存设置:
cache-Control 响应头的语法为
Cache-Control = “Cache-Control” “:”;public
private
no-cache
no-store
must-revalidate
max-age=时间
public:指示响应数据可以被任何客户端缓存
private:指示响应数据可以被非共享缓存所缓存。这表明响应的数据可以被发送请求的浏览器缓存,而不能被中介所缓存
no-cache:指示响应数据不能被任何接受响应的客户端所缓存
no-store:指示所传送的响应数据除了不能被缓存,也不能存入磁盘。一般用于敏感数据,以免数据被复制
must-revalidate:指示所有的缓存都必须重新验证
max-age:数据经过 max-age 设置的秒数后就会失效
创建静态文件a.修改主配置文件:
上传图片
rz -e
vim /usr/local/nginx/conf/nginx.conf
server区域写一个location区域设置可以缓存
server {
location ~* .(html)$ {
access_log off;
# 使用 Last-Modified。no-cache 会发起往返通信来验证缓存的响应,但如果资源未发生变化,则不会下载,返回304
add_header Cache-Control max-age=no-cache;
}location ~* .(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
access_log off;
add_header Cache-Control max-age=360000;
}
}
b.重启服务:
pkill nginx && rm -rf client_body_temp/ scgi_temp/ uwsgi_temp/ proxy_temp/ fastcgi_temp/ && /usr/local/nginx/sbin/nginx
c.给图片权限:
cd /usr/local/nginx/
html/
chmod 777 1.jpg
11、Nginx 反向代理让缓存失效怎么配置:
a.开启一台apache:
service httpd start
b.cd /var/www/html/
添加图片
c.修改配置文件:
vim /usr/local/nginx/conf/nginx.conf (反向代理)
d.重启nginx并删除日志文件:
pkill nginx && rm -rf client_body_temp/ scgi_temp/ uwsgi_temp/ proxy_temp/ fastcgi_temp/ && /usr/local/nginx/sbin/nginx
返回值为200:
e.新建子配置文件:
useradd -s /bin/nologin -M nginx
cd /usr/local/nginx/conf
vim nginx-proxy.conf(反向代理缓存配置文件)
proxy_cache nuget-cache;
proxy_cache_valid 168h;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
f.打开主配置文件:
vim /usr/local/nginx/conf/nginx.conf
include nginx-proxy.conf;
proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inact ive=168h;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.21.13:80;
add_header Cache-Control max-age=no-cache;
}
location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
access_log off;
add_header Cache-Control "public,max-age=36000"; (缓存失效时间s)
proxy_pass http://192.168.21.13:80;
}
g.创建目录:
mkdir -p /data/nuget-cache
chown -R nginx:nginx /data/
h.检测:
/usr/local/nginx/sbin/nginx -t
i.重启服务:
pkill nginx && rm -rf client_body_temp/ scgi_temp/ uwsgi_temp/ proxy_temp/ fastcgi_temp/ && /usr/local/nginx/sbin/nginx
12、Nginx开启压缩:
a. vim nginx.conf
35 gzip_min_length 1k;
36 gzip_buffers 4 16k;
37 gzip_http_version 1.1;
38 gzip_comp_level 9;
39 gzip_types text/plain application/x-javascript text/css application/xml text/javascript a pplication/x-httpd-php application/javascript application/json;
40 gzip_disable "MSIE [1-6]\.";
41 gzip_vary on;
b.重启服务:
pkill nginx && rm -rf client_body_temp/ scgi_temp/ uwsgi_temp/ proxy_temp/ fastcgi_temp/ && /usr/local/nginx/sbin/nginx
源文件大小:1.9M
压缩后:259K