文章目录

  • 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

nginx跳转到内网ip了 nginx地址跳转_https

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

nginx跳转到内网ip了 nginx地址跳转_运维_02

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

nginx跳转到内网ip了 nginx地址跳转_nginx_03

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

nginx跳转到内网ip了 nginx地址跳转_linux_04


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

nginx跳转到内网ip了 nginx地址跳转_nginx跳转到内网ip了_05


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