• 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:WindowsSystem32driversetchosts ,写入如下信息
    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地址,查看结果
  • 相关阅读:
    LeetCode 112. Path Sum
    LeetCode 866. Prime Palindrome
    LeetCode 51.N-Queens
    【Codeforces 4D】Mysterious Present
    【Codeforces 158C】Cd and pwd commands
    【Codeforces 27A】Next Test
    【Codeforces 385C】Bear and Prime Numbers
    【Codeforces 474D】Flowers
    【Codeforces 1B】Spreadsheets
    【Codeforces 1114D】Flood Fill
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/11367814.html
Copyright © 2020-2023  润新知