• 技术文章 >后端开发 >php教程

    Nginx的安装与配置

    不言不言2018-06-05 09:30:06原创1244

    这篇文章主要介绍了关于Nginx的安装与配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    Nginx学习实践


    一、选择Nginx目的

    1. 高并发连接
      官方测试nginx能够支撑5万并发连接,实际测试可以达到3万左右,按照这样计算,每天可以处理
      亿次访问量,采用最新epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型;而achache则使用的是传统的selelct
      模型

    2. 内存消耗小
      Nginx+php(FastCIGI)服务器在3万并发连接下,开启10个nginx进程消耗150MB内存(15MB*10),开启64个php-cgi
      进程消耗1280MB内存(20MB*64),使用webbench做压力测试,在3万并发量速度依然很快。

    3. Nginx支持负载均衡

    4. Nginx支持反向代理

    5. 成本低廉
      相对于F5BIG-IP、NetScaler等硬件负载均衡交换机动辄10多万设置几十万,可以免费使用,并且可以用于商业用途

    6. Nginx请求的连接方法
      select,poll,kqueue,epoll

    二、安装Nginx

    准备环境
    Linux系统是Centos 6.5 64位,我直接切换到root用户下安装
    官方文档:http://nginx.org/en/

    su root

    进入用户目录下载程序

    cd /usr/local/src

    现在相关组件

    ngnix:wget http://nginx.org/download/nginx-1.13.12.tar.gzwget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gzwget http://zlib.net/zlib-1.2.11.tar.gzwget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz

    安装c++编译环境,如已安装可略过

    [root@localhost src]# yum install gcc-c++省略安装内容...期间会有确认提示输入y回车
    Is this ok [y/N]:y
    省略安装内容...

    安装Nginx及相关组件

    openssl安装
    [root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz省略安装内容...[root@localhost src]# cd openssl-fips-2.0.10[root@localhost openssl-fips-2.0.10]# ./config && make && make install省略安装内容...pcre安装
    [root@localhost src]# tar zxvf pcre-8.40.tar.gz省略安装内容...[root@localhost src]# cd pcre-8.40[root@localhost pcre-8.40]# ./configure && make && make install省略安装内容...zlib安装
    [root@localhost src]# tar zxvf zlib-1.2.11.tar.gz省略安装内容...[root@localhost src]# cd zlib-1.2.11[root@localhost zlib-1.2.11]# ./configure && make && make install省略安装内容...nginx安装:
    这里的先增加一个nginx用户组和一个nginx用户
    例如:新建用户加入ftp组,/sbin/nologin意思是用户不允许登录(通过ftp可以连接),用户名为nginx
    groupadd -r ftp
    useradd -s /sbin/nologin -g ftp -r nginx
    
    
    [root@localhost src]# tar zxvf nginx-1.13.12.tar.gz省略安装内容...[root@localhost src]# cd nginx-1.13.12[root@localhost nginx-1.10.2]# ./configure --sbin-path=/usr/local/nginx/sbin \
    --conf-path=/usr/local/nginx/conf/nginx.conf \
    --pid-path=/usr/local/nginx/logs/nginx.pid \
    --with-http_ssl_module \
    --with-pcre=../pcre-8.40 \  #指向解压的源码目录--with-zlib=../zlib-1.2.11 \    #指向解压的源码目录--with-openssl=../openssl-2.0.10 \ #指向解压的源码目录--with-http_stub_status_module \#启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态--user=nginx \
    --group=nginx
    
    
    
    [root@localhost nginx-1.10.2]#make && make install省略安装内容...

    启动Nginx

    查看你的nginx安装位置

    whereis nginx

    启动、停止、重启命令

    启动:/usr/local/nginx/sbin/nginx
    重启:/usr/local/nginx/sbin/nginx -s reload
    停止:/usr/local/nginx/sbin/nginx -s stop

    配置文件打开、验证

    配置文件:vim /usr/local/nginx/conf/nginx.conf
    验证配置文件:/usr/local/nginx/sbin/nginx -t

    查看nginx进程

    ps -aux | grep nginx

    查看端口

    netstat -tulnp | grep :80      查询以80开头的端口服务

    如果看到进程了,在本地浏览器输入:http://localhost就会看到欢迎界面;说明安装成功了。
    如果在别的机器访问可以输入nginx那台服务器ip,不过你要确保80端口是开放的,后面配置ssl要确保443端口开放。

    Nginx配置

    1、进程配置:nginx开辟的进程数根据cpu的核数来定
    这里写图片描述

    php入门到就业线上直播课:进入学习


    首先要查看cpu核数命令:

    cat /proc/cpuinfo

    2.worker_connections连接数配置
    网上建议:
    如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式:最大连接数 = worker_processes * worker_connections/4
    查看相关资料,生产环境中worker_connections 建议值最好超过9000,计划将一台nginx 设置为10240,再观察一段时间。

    3.location配置
    语法:location[=|~|~*|^~]/uri/{……}
    默认值:no
    使用字段:server
    这个参数根据uri的不同需求来进行配置,可以使用字段串与正则表达式匹配,如果要使用正则表达式,你必须制定下列前缀
    ~:区分大小写
    ~*:不区分大小写
    ^~:禁止表达式匹配
    =:精确匹配

    例子:

    location = / {    #只匹配/的查询
        [configurationA]
    }
    
    location / {    #匹配任务以/开始的查询,但是正则表达式与一些较长的字符串将被首先匹配
       [configuration B ]
    }
    
    location ^~ /images/ {    #匹配任何以/images/开始的查询并停止搜索,不检查正则表达式
        [configuration C ]
    }
    
    location ~*.(gif|jpg|jpeg)$ {    #匹配任何以gif,jpg,jpeg结尾的文件,但是所有/images/目录的请求将在configuration C中处理
        [configuration D]
    }
    
    
    error_page  404 403              /404.html;
    location = /404.html {
        root   /var/christy/www/web;
    }
    
    
    location /data {    #开启data目录浏览
        autoindex on;
    }#类似于别名location /i/ {    #当访问i的时候别名的路径就是/data/w3/images/;
        alias /data/w3/images/;
    }

    4.地址重写

    Rewrite主要的功能就是实现URL的重写,nginx的rewrite规则采用PCRE Perl兼容正则表达式的语法进行规则匹配,
    如果需要nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库
    
    URL是统一资源定位符。如:http://www,linkwan.com/333/welcome.htmURI由一个通过通用资源标志符进行定位。比如:333/welcome.htm
    
    地址重写用到的指令    if指令
    规则语法
    
    如果用户的代理是微软的msie(ie9以下),那么在浏览器里面输入http://www.chrXXtyedu.cn/dd就会跳转到http://www.christyedu.cn/msie/$1;ie10以上是Mozillaif ($http_user_agent ~ MSIE) {
        rewrite ^(.*)$ /msie/$1 break;
    }
    
    
    
    如果请求的文件名不存在就重定向到/site/$host/images/$1if(!-f $request_filename){
        rewrite ^/img/(.*)$ /site/$host/images/$1 last;
    }
    
    location ~* \.(gif|jpg|png|swf|flv)$ {
        valid_referers none blocked www.chrXXstyedu.cn chrXXtyedu.cn;    if ($invalid_referer) {
            rewrite ^/(.*) http://www.test.com/333/welcome permanent;
        } //防盗链}
    
    设置限速
    location /download/ {
        limit_rate_after 500k;
        limit_rate 50k;
    }
    大概意思是:用户下载达到 500k 后,便控制其速度在 50k 以内。

    5.ssl配置
    1_chrXXtyedu.cn_bundle.crt
    2_chrXXtyedu.cn.key
    这两个文件放在conf目录下
    一定要把443端口放开!!!!

    server {
            listen       443 ssl;
            server_name  www.chXXXtyedu.cn chrXXyedu.cn;
    
            ssl_certificate      1_chrXXtyedu.cn_bundle.crt;
            ssl_certificate_key  2_chrXXtyedu.cn.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers  on;
    
            location / {
                root   /var/chXXty/www/web-https;
                index  index.html index.htm;
            }
        }

    6.日志管理

     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';    $http_x_forwarded_for和$remote_addr客户端的ip地址(代理服务器,显示代理服务ip)    $remote_user用来记录远程客户端用户名称    $time_local用来记录访问时间以及时区    $request用于记录请求的URL与HTTP协议    $status用于记录请求状态,例如成功是状态为200,页面找不到时404
        $body_bytes_sent用于记录发送给客户端的文件主题内容大小    $http_referer用于记录是从哪个页面链接访问过来的    $http_user_agent用于记录客户端浏览器的相关信息

    7.介绍部分缓存

    open_log_file_cache指令
    
    语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
    open_log_file_cache off;
    默认值: open_log_file_cache off;
    配置段: http, server, location
    
    对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:
    
    参数注释如下:
    max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
    inactive:设置存活时间,默认是10s
    min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
    valid:设置检查频率,默认60s
    off:禁用缓存
    实例如下:
    代码如下:
    open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
    
    
    
    http {
        client_max_body_size 300m;
        client_body_buffer_size 600;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_buffer_size 16k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64;
        proxy_temp_file_write_size 64k;
     }
    
     允许客户端请求的最大的单个文件字节数
     client_max_body_size
    
     缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
     client_body_buffer_size
    
     跟后端服务器连接的超时时间 发起握手等候响应超时时间
     proxy_connect_timeout
    
     连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
     proxy_read_timeout
    
     后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
     proxy_send_timeout
    
     代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
     proxy_buffer_size 16k
    
     同上告诉Nginx保存单个用的几个Buffer及最大用多大空间
     proxy_buffers 4 32k
    
     如果系统很忙的时候可以申请更大的proxy_bufers 官方推荐*2
     proxy_busy_buffers_size 64k;
    
     proxy缓存临时文件的大小
     proxy_temp_file_write_size 64k;
    
     location /sms {
        proxy_pass http://127.0.0:8080;    #设置Host是真实浏览器的,而不是代理的
        proxy_set_header Host $host;
        proxy_cache cache_one;    #设置请求ip是真实的ip,而不是代理的
        proxy_set_header X-Forwarded-For $remote_addr;
     }

    8.代理,反向代理和负载均衡

    正向代理的概念

    正向代理,也就是传说中的代理,他的工作原理就像一个跳板,
    简单的说,
    我是一个用户,我访问不了某网站,但是我能访问一个代理服务器
    这个代理服务器呢,他能访问那个我不能访问的网站
    于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容
    代理服务器去取回来,然后返回给我
    正常情况: 
    client —(send request)—> server
    代理情况: 
    client —(send request)—> clinet proxy –(send request)—> server

    什么又是反向代理

    正向代理中代理的过程是客户端,代理机器是作为一个访问客户的身份的;而在反向代理中代理机器是作为服务身份。
    正向代理中代理的过程是客户端,服务端对代理的存在无感知;而在反向代理中客户机对代理的存在无感知。
    反向代理情况: 
    clinet –(send request)–> server proxy –(send request)–>other 
    server
    Nginx集反向代理和负载均衡于一身,在配置文件中修改配就可以实现
    upstream xxx{};upstream模块是命名一个后端服务器组,组名必须为(proxy_pass的名称)后端服务器站点域名,内部可以写多台服务器ip和port,还可以设置跳转规则及权重等等proxy_pass;代表后端服务器组名,此组名必须为后端服务器站点域名server_name和upstream{}的组名可以不一致,server_name是外网访问接收请求的域名,upstream{}的组名是跳转后端服务器时站点访问的域名
    
    upstream chxxty_server {
            server 119.29.54.177:8081 weight=5;
            server 119.29.54.177:8080 weight=10 max_fails=3 fail_timeout=30s;} 
    
    
    server {
            listen       443 ssl;
            server_name  www.chXXtyedu.cn chxxxedu.cn;
    
            ssl_certificate      1_chxxtyedu.cn_bundle.crt;
            ssl_certificate_key  2_chxxyedu.cn.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers  on;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
            location ~ .* {
                    proxy_pass http://chxxty_server;
                    #设置Host是真实浏览器的,而不是代理的
                    proxy_set_header Host $host;
                    #设置请求ip是真实的ip,而不是代理的
                    proxy_set_header X-Forwarded-For $remote_addr;
            }
    }

    祝大家成功!

    相关推荐:

    nginx应用:使用nginx进行负载均衡

    Nginx的场景实践

    Nginx编译安装Lua模块

    以上就是Nginx的安装与配置的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:Nginx 配置 安装
    上一篇:PHP对二维数组排序的方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 一起聊聊PHP session共享的四种解决方案• PHP底层的运行机制与原理_PHP教程• 通过PHP修改Linux或Unix口令的方法分享_PHP教程• 浅析php设计模式之数据对象映射模式_PHP• PHP实现的连贯操作、链式操作实例_PHP
    1/1

    PHP中文网