Nginx高端成长之路web开发服务器配置学习

快速上手Nginx

2017-11-25  本文已影响130人  Lee_DH

Nginx是一个高性能的HTTP和反向代理器,具有占内存少,并发能力强的特点。市面上关于Nginx的博客和书籍非常多,本文只是帮助读者快速上手Nginx,篇幅有限,很难做到面面俱到,望各位见谅。

名词解释

Nginx与PHP通信过程

我们都知道,PHP作为脚本语言,是需要解析器解释执行的,一般用 php解析器(/usr/bin/php) 执行php文件,但是用户要访问php文件,怎么合理去安排php解析器(/usr/bin/php)有序、高效执行php文件呢,这就是Nginx的作用了,它可以看做是客户端与PHP解析器的中间媒介,合理调度PHP解析器去解析PHP程序。

一般的交互过程是:客户端向服务器请求一个非静态资源(如PHP文件,非html文件、图片等),Nginx将请求分发给PHP-FPM进程,由PHP-FPM转发给PHP解析器,PHP解析完成之后,将解析的内容交由PHP-FPM,返回给客户端

nginx操作

nginx采用的是master-worker多线程模式,所以在操作nginx时,只需要与nginx的master进程通信即可,nginx0.8之后可以采用命令行参数进行nginx的操作

启动nginx:nginx -c nginx.conf
平滑重启nginx:kill -HUP 主进程号
重启nginx: nginx -s reload
从容停止nginx: kill -QUIT 主进程号
快速停止nginx:1. nginx -s stop 2. kill -TERM 主进程号

Nginx配置

Nginx配置文件主要分4部分

Nginx配置文件demo

#Nginx的worker进程运行用户以及用户组
user  www www;

#worker开启的进程数,一般设置为与cpu核数一致
worker_processes auto;

#定义错误日志,error_log级别 [debug|info|notice|warn|crit]
error_log  /var/log/nginx/error.loh  info;

#指定进程ID存储文件位置
pid        /usr/local/nginx/logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
#单个进程最大的文件连接数
worker_rlimit_nofile 51200;

events
    {
        #选用的事件模型 [ kqueue | rtsig | epoll | /dev/poll | select | poll ]
        use epoll;
        #每个进程最大连接数
        worker_connections 51200;
        #串行工作方式(降低负载,当服务器吞吐量大时,使用并行工作方式)
        multi_accept on;
    }

http
    {
        #文件扩展名与文件类型映射表
        include       mime.types;
        #指定文件类型为二进制流
        default_type  application/octet-stream;

        #服务器名字的hash表大小
        server_names_hash_bucket_size 128;
        #客户端请求头的header_buffer大小
        client_header_buffer_size 32k;
        #客户端请求头中较大的消息头的缓存最大数量和大小
        large_client_header_buffers 4 32k;
        #客户端请求单个文件的最大字节数
        client_max_body_size 50m;

        #开启高效传输模式
        sendfile   on;
        #防止网络阻塞
        tcp_nopush on;
        tcp_nodelay on;
        #客户端链接超时时间
        keepalive_timeout 60;

        #FastCGI相关参数,改善网站性能,减少资源占用
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

        #gzip模块设置(服务器端压缩页面,传到浏览器后浏览器解压并解析,主流浏览器都支持解析gzip压缩过的页面)
        #开启gzip压缩
        gzip on;
        #最小压缩文件大小
        gzip_min_length  1k;
        #压缩缓冲区
        gzip_buffers     4 16k;
        #压缩版本
        gzip_http_version 1.1;
        #压缩等级1-9,等级越高,压缩效果越好,节约宽带,但CPU消耗大
        gzip_comp_level 2;
        #压缩类型
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
        #前端缓存服务器缓存经过压缩的页面
        gzip_vary on;
        #Nginx作为反向代理时启用,根据请求头中的Via字段,决定是否启用gzip压缩
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        #limit_conn_zone $binary_remote_addr zone=perip:10m;
        ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.

        #低版本的Nginx可能存在漏洞
        ## 隐藏Nginx的版本信息
        ![展示版本信息](http://39.108.219.103/nginx_version.png)
        ![隐藏版本信息](http://39.108.219.103/nginx_no_version.png)
        server_tokens off;
        #用户的访问日志
        access_log /var/log/nginx/access.log;

server
    {
        #监听端口
        listen 80 ;
        #listen [::]:80 default_server ipv6only=on;
        #访问域名
        server_name localhost;
        #默认页面,优先展示:index.html > index.htm > index.php
        index index.html index.htm index.php;
        #指定虚拟主机的网页根目录
        root  /home/wwwroot;

        ###可以单独为此虚拟主机指定访问日志和错误日志的存放路径
        
        #自定义错误页面(注:后面的路径是相对地址,相对于虚拟主机的网页根目录)
        error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php.conf;

        #配置Nginx状态页
        location /nginx_status
        {
            stub_status on;
            access_log   off;
        }

        access_log  /home/wwwlogs/access.log;
    }
include vhost/*.conf;
}

location配置规则

匹配符号
匹配优先级

location = > location 完整路径 > location ^~ 路径 > location ~ 、~* > location 部分起始路径 > /

Rewrite规则

Nginx做反向代理服务器

正向代理:

反向代理:

设置反向代理

upstream www_koumm_com {   
   server 127.0.0.1:8000 down;
   server 127.0.0.1:7070 backup;
   server 192.168.129.22:8000 weight=5;   
   server 192.168.129.23:8000;
}   
  
server {   
   listen          80;   
   server_name     www.koumm.com;   
   access_log      logs/www.koumm.access.log main;   
   location / {   
       proxy_pass  http://www_koumm_com;
   }   
} 

上面的配置文件就实现了初步的负载均衡,所有的请求都会通过proxy_pass转发到后台的服务器,后台的服务器通过upstream建立。upstream结点中的服务器支持4种方式进行请求分配:

每个设备可以有5种不同的状态:
1. down: 当前server不参与负载
2. weight: weight越大,负载的权重就越大 
3. max_fails: 允许请求失败的最大次数(默认为1)
4. fail_timeout: max_fail失败之后,暂停的时间 
5. backup: 定义备份机器,只有其他机器在忙或者down的时候,才会分发到backup机器
相关博客:

Nginx从听说到学会 - 简书
nginx配置location总结及rewrite规则写法 - 官朝辉 - 博客园
使用Nginx实现反向代理 - CSDN博客
正向代理与反向代理【总结】 - Anker's Blog - 博客园
反向代理为何叫反向代理? - 知乎
nginx fastcgi配置 - lpfuture - 博客园

如果这篇文章对你有帮助,请点个赞哈,感谢

上一篇下一篇

猜你喜欢

热点阅读