Nginx相关配置使用

用户访问网站的流程

  • 浏览器中输入www.baidu.com 到显示页面过程

1.域名解析ip DNS解析过程
2.tcp三次握手
3.http 请求报文
4.处理请求
5.http 响应报文
6.tcp四次挥手
7.显示页面
使用curl命令显示请求和响应的过程

[root@wsm ~]# curl -v www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
*   Trying 220.181.38.149...
* Connected to www.baidu.com (220.181.38.149) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Thu, 13 Jun 2019 03:27:58 GMT
< Etag: "588604c8-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

衡量网站访问量大的单位
ip 网站每天有多少个独立的io 访问
uv unique user 独立的用户
pv page view 页面访问量

nginx实现http协议

利用nginx搭建网站环境

nginx编译安装

根据源代码 ./configure make make install 三步

  • 创建安装目录
    mkdir -p /server/tools
  • 下载nginx
    wget -P /server/tools/ http://nginx.org/download/nginx-1.14.2.tar.gz
  • 解压nginx-1.14.2.tar.gz
    [root@wsm tools]# tar xf nginx-1.14.2.tar.gz
[root@wsm nginx-1.14.2]# ll
total 732
drwxr-xr-x. 6 1001 1001   4096 Jun 14 12:29 auto
-rw-r--r--. 1 1001 1001 288742 Dec  4  2018 CHANGES
-rw-r--r--. 1 1001 1001 440121 Dec  4  2018 CHANGES.ru
drwxr-xr-x. 2 1001 1001    168 Jun 14 12:29 conf
-rwxr-xr-x. 1 1001 1001   2502 Dec  4  2018 configure
drwxr-xr-x. 4 1001 1001     72 Jun 14 12:29 contrib
drwxr-xr-x. 2 1001 1001     40 Jun 14 12:29 html
-rw-r--r--. 1 1001 1001   1397 Dec  4  2018 LICENSE
drwxr-xr-x. 2 1001 1001     21 Jun 14 12:29 man
-rw-r--r--. 1 1001 1001     49 Dec  4  2018 README
drwxr-xr-x. 9 1001 1001     91 Jun 14 12:29 src
  • 安装nginx所需的环境
    yum install -y pcre-devel openssl-devel 保证nginx使用时可用正则
  • ./configure

--prefix= 指定安装位置
--user=www 指定nginx运行用户
--group=www 指定nginx运行用户组
--with-http_stub_status_module 安装nginx状态模块
--with-http_ssl_module 安装ssl模块 用来实现https

最后执行./configure --prefix=/application/nginx-1.14.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
创建虚拟用户 useradd www -s /bin/nologin

  • make 编译
  • make install 安装
  • 安装完成检查 tree /application/nginx-1.14.2/
[root@wsm nginx-1.14.2]# tree -L 1 /application/nginx-1.14.2/
/application/nginx-1.14.2/
├── conf
├── html
├── logs
└── sbin
  • 删除原目录存在的解压文件,进入编译后目录
[root@wsm nginx-1.14.2]# pwd
/application/nginx-1.14.2
[root@wsm nginx-1.14.2]# rm -rf /server/tools/nginx-1.14.2/
  • 测试nginx启动
[root@wsm nginx-1.14.2]# /application/nginx-1.14.2/sbin/nginx -t
nginx: the configuration file /application/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.14.2/conf/nginx.conf test is successful
  • 启动nginx
[root@wsm nginx-1.14.2]# /application/nginx-1.14.2/sbin/nginx
  • 检查进程与端口
[root@web nginx-1.14.2]# ps -ef |grep nginx
root      10887      1  0 14:00 ?        00:00:00 nginx: master process /application/nginx-1.14.2/sbin/nginx
www       10888  10887  0 14:00 ?        00:00:00 nginx: worker process
root      10890   7751  0 14:00 pts/0    00:00:00 grep --color=auto nginx
[root@web nginx-1.14.2]# ss -lntup |grep 80
tcp    LISTEN     0      128       *:80  
  • 使用浏览器访问web ip 提示 Welcome to nginx!表明部署成功
  • nginx启动命令创建为软链接
[root@web nginx-1.14.2]# ln -s /application/nginx-1.14.2/ /application/nginx
[root@web nginx-1.14.2]# ln -s /application/nginx-1.14.2/sbin/nginx /sbin/
[root@web nginx-1.14.2]# which nginx
/usr/sbin/nginx

nginx配置文件及目录

drwxr-xr-x. 2 root root 4096 Jun 15 13:59 conf #配置文件 nginx.conf
drwxr-xr-x. 2 root root 40 Jun 15 13:59 html #站点目录 网站根目录
drwxr-xr-x. 2 root root 58 Jun 15 14:00 logs #日志 access.log访问日志
drwxr-xr-x. 2 root root 19 Jun 15 13:59 sbin #nginx管理命令
nginx #启动命令
nginx -t #检查语法
nginx -s reload #平滑重启 (必须在开启状态下)
nginx -s stop #关闭nginx(必须在开启状态下)

  • 配置文件
[root@web conf]# ll
-rw-r--r--. 1 root root 2656 Jun 15 13:59 nginx.conf
-rw-r--r--. 1 root root 2656 Jun 15 13:59 nginx.conf.default
  • 文件内容

过滤掉nginx.conf文件内的#和空行并定义到nginx.conf内

[root@test01 conf]# egrep -v "^$|#"  nginx.conf.default  >nginx.conf
worker_processes  1;               #worker进程的数量
events {                                    #事件区块开始
    worker_connections  1024; #最大进程连接数
}                                               #事件区块结束
http {                                        #http模块开始
    include       mime.types;      
    default_type  application/octet-stream;
    sendfile        on;                  #开启高效的传输模式
    keepalive_timeout  65;       #连接超时时间
    server {                               #第一个server区块开始,表示一个独立的虚拟主机站点
        listen       80;                  #默认端口80
        server_name  localhost; #提供服务的域名主机名
        location / {
            root   html;
            index  index.html index.htm; #默认的首页文件
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

虚拟主机--搭建多个站点

多个server标签

[root@test01 conf]# vim nginx.conf
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.wsm.com;  #修改域名主机名
        location / {
            root   html/www; #创建或修改站点目录
            index  index.html index.htm; #修改首页文件内容
        }
    }
    server {
        listen       80;
        server_name  blog.wsm.com;#修改域名主机名
        location / {
            root   html/blog;#创建或修改站点目录
            index  index.html index.htm; #修改首页文件内容
        }
    }

"nginx.conf" 27L, 557C written  

[root@test01 conf]# nginx -t
nginx: the configuration file /application/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.14.2/conf/nginx.conf test is successful
[root@test01 conf]# nginx -s reload
[root@test01 conf]# mkdir -p /application/nginx-1.14.2/html/{www,blog}
[root@test01 conf]# for i in www blog
do
echo $i gcy >/application/nginx-1.14.2/html/$i/index.html
done
[root@test01 conf]# for i in www blog ; do cat /application/nginx-1.14.2/html/$i/index.html ; done
www gcy
blog gcy

  • 在本地修改hosts解析,测试是否成功

nginx处理用户的请求流程

  • 1.用户连接的是哪个端口
  • 2.你要的站点是否存在 server_name
  • 使用curl命令取出状态码
[root@test01 conf]#  curl -s -w "%{http_code}\n"   -o /dev/null 10.0.0.111
200

优化nginx配置文件

  • 在conf目录下创建conf.d目录,用来放置多站点server配置文件
    [root@web conf]# mkdir -p conf.d
  • 在conf.d先创建多个server对应的配置文件并进行修改
    [root@web conf]# vim conf.d/www.conf
    [root@web conf]# vim conf.d/blog.conf
  • 删除主配置文件nginx.conf内多站点server并在http模块内写入 include conf.d/*.conf
[root@web conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include       conf.d/*.conf;
}

nginx 访问日志

  • 格式
 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;

log_format:规定格式
remote_addr:客户端ip地址
remote_user:远程用户 默认是空
[time_local] :当前时间
request:请求起始行
status:状态码
body_bytes_sent:服务器向客户相应的内容的大小
http_referer:用户从哪里跳转
http_user_agent:用户使用的浏览器
http_x_forwarded_for:记录用户真实的ip地址(使用负载均衡时涉及到)

location匹配规则 匹配uri

应用场景

  • 隐藏网站重要目录(禁止访问)
  • 网站加速 让用户访问缓存(CDN)
    “~”用于区分大小写(大小写敏感)的匹配; ~ /images {}
    “~” 用于不区分大小写的匹配。还可以用逻辑操作符!对上面的匹配取反,即!~ 和 !~
    “^~”作用是在常规的字符串匹配检查之后,不做正则表达式的检查

location = / { www.oldboy.org符合) www.oldboy.org/ 符合) www.oldboy.org/index.html (不符合)
[ configuration A ]
}
location / { 默认规则 其他条件都不匹配的时候
[ configuration B ]
}
location /documents/ { 匹配路径 www.oldboy.org/admin/
[ configuration C ]
}
location /admin/ { www.oldboy.org/images/admin
你不能访问
}

nginx状态模块

root@web01 conf.d]# curl 10.0.0.7/status/
Active connections: 1   #与服务器已经建立的连接   当前并发数量 
server accepts handled requests  #总数 
 4 4 4 
Reading: 0 Writing: 1 Waiting: 0 

server accepts            一共接收多少请求
       handled            一共处理多少请求
       requests   客户一共发起了多少次请求

Reading: 0        正在读取多少个用户的请求头 (请求)
Writing: 1        正在响应多少个用户的请求   (响应)
Waiting: 0        有多少个用户在等待
workerprocess

nginx简易的认证

  • auth_basic "closed site";
  • auth_basic_user_file conf/htpasswd;

yum install httpd-tools -y
配置模块内容(注意使用绝对路径)

  location /status/ {
        stub_status ;
        auth_basic           "oldboy trainning";
        auth_basic_user_file conf/htpasswd;
  }

htpasswd -bc /application/nginx-1.14.2/conf/htpasswd oldboy 123456
chmod 400 /application/nginx-1.14.2/conf/htpasswd
chown www /application/nginx-1.14.2/conf/htpasswd

  • 修改vim conf.d/www.conf
server {
        listen       80;
        server_name  www.wsm.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        location /status/ {
        stub_status ;
        auth_basic           "oldboy trainning";
        auth_basic_user_file /application/nginx-1.14.2/conf/htpasswd;
        }    
}
  • 检查语法并重启nginx
[root@test01 conf]# nginx -t
nginx: the configuration file /application/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.14.2/conf/nginx.conf test is successful
[root@test01 conf]# nginx -s reload
  • 在浏览器上验证
    访问http://www.wsm.com/status/
    页面显示
image.png

输入用户密码登陆成功

image.png

nginx rewrite功能

nginx处理用户请求(静态页面)
动态页面交给PHP代码(php处理)或 java代码(tomcat处理)

  • 静态页面 用户浏览器进行处理 服务器只负责 请求与响应 处理速度快 支持并发大
  • 动态 页面 服务器进行处理 把处理完成的结果 发送给用户 速度慢 支持并发不高 一般涉及到数据库
    修改配置文件,添加rewrite
[root@test01 conf]# cat conf.d/www.conf 
server {
    listen 80;
    server_name gcy.org;
    rewrite  (^.*$)    http://www.wsm.com/$1 permanent;
    }
server {
        listen       80;
        server_name  www.wsm.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        location /status/ {
        stub_status ;
        auth_basic           "oldboy trainning";
        auth_basic_user_file /application/nginx-1.14.2/conf/htpasswd;
        }    
}

执行curl -Lv gcy.org 跟随跳转到新地址

[root@test01 conf]# curl -Lv gcy.org
* About to connect() to gcy.org port 80 (#0)
*   Trying 10.0.0.111...
* Connected to gcy.org (10.0.0.111) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: gcy.org
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.14.2
< Date: Wed, 19 Jun 2019 21:14:55 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Location: http://www.wsm.com//
< 
* Ignoring the response-body
* Connection #0 to host gcy.org left intact
* Issue another request to this URL: 'http://www.wsm.com//'
* About to connect() to www.wsm.com port 80 (#1)
*   Trying 10.0.0.111...
* Connected to www.wsm.com (10.0.0.111) port 80 (#1)
> GET // HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.wsm.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.14.2
< Date: Wed, 19 Jun 2019 21:14:55 GMT
< Content-Type: text/html
< Content-Length: 8
< Last-Modified: Tue, 18 Jun 2019 23:01:15 GMT
< Connection: keep-alive
< ETag: "5d096d3b-8"
< Accept-Ranges: bytes
< 
www gcy
* Connection #1 to host www.wsm.com left intact

rewrite 小结

  • 1.用户访问的url和实际url不同 与开发对接 url规则
  • 2.伪静态 更容易被搜索引擎 收入
  • 3.新老网站变化

你可能感兴趣的:(Nginx相关配置使用)