Linux 6 Nginx

服务器种类:

IIS:windows上的服务器

Apache:Linux上一代的高性能服务器

Nginx:Linux新一代高性能服务器

通过curl -i xxxxx.xxxx命令可以查看网络请求信息以及使用的服务器。

 

nginx特点:

占用的系统资源少,支持的并发数更多,还可以作为反向代理、负载均衡

 

一、Nginx安装配置

# 依赖库
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
# 编译安装
1.下载源码包
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
2.解压缩源码
tar -zxvf nginx-1.12.0.tar.gz
3.配置,编译安装  开启nginx状态监测功能
./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module 
make && make install 
4.启动nginx,进入sbin目录,找到nginx启动命令
cd sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #平滑重启(修改了配置文件,不重启就能加载)

二、Nginx目录结构

  • conf 存放nginx所有配置文件的目录,主要nginx.conf
  • html 存放nginx默认站点的目录,如index.html、error.html等
  • logs 存放nginx默认日志的目录,如error.log access.log
  • sbin 存放nginx主命令的目录,sbin/nginx

三、Nginx主配置文件解析

Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。

CoreModule核心模块

user www;                       #Nginx进程所使用的用户
worker_processes 1;             #Nginx运行的work进程数量(建议与CPU数量一致或auto)
error_log /log/nginx/error.log  #Nginx错误日志存放路径
pid /var/run/nginx.pid          #Nginx服务运行后产生的pid进程号
events事件模块

events {            
    worker_connections  //每个worker进程支持的最大连接数
    use epool;          //事件驱动模型, epoll默认
}
http内核模块

//公共的配置定义在http{}
http {  //http层开始
...    
    //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
    'server' {
        listen       80;        //监听端口, 默认80
        server_name  localhost; //提供服务的域名或主机名
        access_log host.access.log  //访问日志
        //控制网站访问路径
        'location' / {
            root   /usr/share/nginx/html;   //存放网站代码路径
            index  index.html index.htm;    //服务器返回的默认页面文件
        }
        //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
        error_page   500 502 503 504  /50x.html;
    }
    ...
    //第二个虚拟主机配置
    'server' {
    ...
    }
    
    include /etc/nginx/conf.d/*.conf;  //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件

}   //http层结束

四、Nginx多虚拟主机

可以在一台服务器上运行多个虚拟主机,不同的虚拟主机返回不同的页面。

#多虚拟主机的配置
1.修改nginx底下的conf/nginx.conf ,修改信息如下
        server {
            listen       80;
            server_name  www.s14huoying.com;
            location / {
                #指明网页根目录在/opt/html/文件夹下
                root   /data/huoying;
                index  index.html index.htm;
            }
            }
        server {
            listen       80;
            server_name  www.s14hanju.com;
            location / {
                #指明网页根目录在/opt/html/文件夹下
                root   /data/hanju;
                index  index.html index.htm;
            }
            }
2.重新加载nginx配置文件
../sbin/nginx -t  #检测语法
../sbin/nginx -s reload #平滑重启 

3.准备不同的虚拟主机的站点资料
mkdir -p /data/{huoying,hanju}
放入不同的资料如下
├── hanju
│   ├── hanju.jpg
│   └── index.html
└── huoying
    ├── index.html
    └── mingren.jpg
    
4.写入到本地dns解析文件,由于我是在windows中通过浏览器访问,应该在windows的hosts文件中添加记录
hosts文件就是一个本地dns(就是将域名转化成ip地址)强制解析的文件
windows的hosts文件就在这里:C:\Windows\System32\drivers\etc\hosts ,写入如下信息
192.168.12.96   www.s14huoying.com
192.168.12.96   www.s14hanju.com

5.在windows中,测试访问多域名配置

五、Nginx状态模块

在配置文件中添加两行即可:

location /status {
    stub_status on;
}

这样访问xxxxxx/status就可以查看当前的连接数量等信息。

六、Nginx访问日志

在配置文件中,打开注释,nginx.conf 
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; # 保存路径
    
参数详解:
$remote_addr    记录客户端ip
$remote_user    远程用户,没有就是 “-”
$time_local    对应[14/Aug/2018:18:46:52 +0800]
$request     对应请求信息"GET /favicon.ico HTTP/1.1"
$status      状态码
$body_bytes_sent  571字节 请求体的大小
$http_referer  对应“-”  由于是直接输入浏览器就是 -
$http_user_agent  客户端身份信息
$http_x_forwarded_for  记录客户端的来源真实ip 97.64.34.118


打开了功能之后,可一通过logs/access_log查看用户身份信息
192.168.12.60 - - [06/Dec/2018:11:24:04 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "-"

 

七、反向代理

正向代理的是客户端,是客户端通过代理去访问一个网站。

反向代理的是服务器,是当服务器接收到一个请求后转发给代理服务器。

server {
       listen 80;
          server_name  www.s14huoying.com;
          location / {
          proxy_pass http://192.168.12.38;  #请求会直接转发给http://192.168.12.38; 
}

 

八、集群和负载均衡

集群:就是用多台服务器来共同运行一个nginx,保证多用户可以同时访问,也避免一台服务器宕机导致的整个服务瘫痪。

负载均衡:就是指定多个反向代理,但是nginx会自动帮我们通过一定的算法切换不同的代理,让多个代理处理的请求数达到一个平衡。

nginx负载均衡配置
1.环境准备,准备3台服务器
192.168.12.96   nginx入口node1
192.168.12.67   应用服务器1
192.168.12.38   应用服务器2

2.关闭所有机器的防火墙


3.在node1节点上配置负载均衡配置(发牌人)
    1.修改配置文件nginx.conf ,写入如下配置
            #定义负载均衡池名字叫做s14django
            upstream s14django {   
                #池子中存放2个服务器,默认轮询方式调度服务器
                server 192.168.12.38:8000; 
                server 192.168.12.67:8000;
# server 192.168.12.67:8000 weight=2;
# server 192.168.12.38:8000 weight=3;
# 表示这两个服务器处理请求的比例是2:3,这是按照权重调度服务器 } #root参数定义网页的根目录,可以写在虚拟主机内,局部变量 #如果写在server标签外,就是全局变量 root html; #虚拟主机1 server { listen
80; server_name www.s14huoying.com; location / { #当请求发送到www.s14huoying.com的时候,匹配到 / ,就执行以下代码 proxy_pass http://s14django; #包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建 #这个proxy_params文件创建在/opt/nginx1-12/conf底下 include proxy_params; } } 2.手动创建这个参数文件 touch /opt/nginx1-12/conf/proxy_params 写入信息 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; 4.配置两台应用服务器 1.准备一个flask代码,运行 pip3 install flask 2.准备代码 myflask.py from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return "<h1>我是伟华</h1>" if __name__=="__main__": app.run(host='0.0.0.0',port=8000) 3.启动应用服务器 python3 myflask.py 5.通过访问nginx负载均衡器入口,查看负载均衡 是否正常分配,默认是轮训方式 1.访问自己的nginx负载均衡的ip地址,查看结果

 

posted @ 2019-08-17 10:55  不可思议的猪  阅读(183)  评论(0编辑  收藏  举报