nginx配置指南

nginx(读作engine x)是一款设计优秀的Http服务器, 其占用内存少, 负载能力强且稳定性高, 正在被越来越多的用户所采用.

nginx可以为HTTP, HTTPS, SMTP, POP3, IMAP协议提供反向代理服务, 并提供安全, 负载均衡和静态文件服务.

本文将简单介绍在ubuntu平台上nginx配置方式. 使用apt-get包管理器安装nginx:

apt-get install nginx

本文示例在nginx/1.4.6版本上测试通过:

$ nginx -v
nginx version: nginx/1.4.6 (Ubuntu)

初识nginx

apt-get默认将nginx安装在/usr/sbin/nginx目录下.

我们可以通过编写/etc/nginx目录下的配置文件来操作nginx:

$ ls /etc/nginx/
conf.d mime.types nginx.conf  proxy_params  sites-available  uwsgi_params
fastcgi_params  scgi_params   sites-enabled 

核心配置文件为nginx.conf, 为了便于管理多个站点可以将不同站点的配置文件放在sites-available, sites-enabled或自定义目录中, 而后导入到nginx.conf中.

nginx是一个高并发性能的服务器, 其采用一个master进程管理多个worker进程的方式提供服务.nginx推荐worker进程数与CPU核心数相同.

每个worker进程采用非阻塞的事件模型为多个客户端链接提供服务, 如epollselect. 非阻塞IO允许在内核执行IO操作时worker进程为其它客户提供服务.

更多讨论可以参考Linux的IO模型.

nginx.conf进行nginx并发配置:

worker_processes 4;

events {
        worker_connections 768;
        use epoll;
        # multi_accept on;
}

日志

nginx默认将服务器日志保存在/var/log/nginx/目录中, 日志分为access.logerror.log两种.

修改nginx.conf的http配置项下的日志配置:

http {
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log info;
}

error的级别从低到高为:

  1. debug
  2. info
  3. notice
  4. warn
  5. error
  6. crit
  7. alert
  8. emerg

access.log保存正常访问记录, 包括时间, 源地址, 目的地址, 状态码和客户端类型等信息:

101.226.33.238 - - [04/Mar/2017:12:08:25 +0800] "GET /static/js/jquery-2.1.0.js HTTP/1.1" 200 244963 "http://test.cn" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2141.400 QQBrowser/9.5.10219.400"

error.log保存服务器出错信息, 在发生故障时请记得检查error.log中的错误报告.

操作

使用sudo service [option]命令或sudo /etc/init.d/nginx [option]命令来管理nginx. 它们提供的选项有:

option操作
start启动
status状态
stop停止
restart重启服务, 即stop+start
reload重新加载配置
force-relaod强制重新加载
configtest测试配置文件
rotate打包日志

比如启动服务器时可以使用sudo service startsudo /etc/init.d/nginx start命令.

reload采用平滑升级的方式, 当更新配置时master会先加载新配置文件并检查语法. 然后, 尝试应用新的配置.

若尝试失败则回滚到之前的配置, 若成功则开启新的worker进程. 在新worker进程上线提供服务后, 关闭旧的的worker实现平滑升级.

关于nginx更新配置的更多信息可以参考官网的Changing Configuration.

nginx在日志文件过大时会自动将日志文件压缩并重新编号, 这个过程称为rotate:

$ ls /var/log/nginx/
access.log access.log.3.gz access.log.2.gz access.log.1.gz
error.log error.log.3.gz error.log.2.gz error.log.1.gz

反向代理

反向代理是服务端的代理, 它根据客户端请求从服务端获取响应, 然后将服务端的响应返回给客户端.

反向代理服务器在为每个客户端服务时需要再与服务端建立链接, 即需要建立两个链接.

我们在nginx.conf的http项中添加server配置项:

http {
    # ...
    server {
      listen 80;
      server_name test.site.cn;
      client_max_body_size 1M;

      location / {
          proxy_pass http://127.0.0.1:8001;

           proxy_http_version 1.1;
           proxy_pass_header Server;
           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Scheme $scheme;
           proxy_redirect off;
       }
    }
    # ...
}

上述配置要求nginx监听80端口, 所有发往本机且目标地址为"test.site.cn"的Http请求都会根据路径.

location配置项设置发往特定路由的请求, 如location /static/ {}将配置发往test1.cn/static/下的请求.

location / {}是优先级最低的配置项, 当没有其它location配置可以匹配请求时, 该请求将按照location /的配置进行处理.

proxy_pass是最重要的配置, 上述示例中所有匹配到location /的请求都将被转发到http://127.0.0.1:8001. 我们需要在8001端口上部署uwsgi, fcgi, libhttpd等提供服务.

因为8001端口上的服务端收到的是来自nginx的链接, 所以必要时我们需要将原请求的信息放入header中通知8001上的服务端.

静态文件

nginx可以通过sendfile和cache等机制加速静态文件的访问, 只需要在location下添加root配置项:

location /static/ {
    root  /home/www/site;
    expires 1d;
}

添加上述配置后, 对/static/file的访问都将由nginx直接返回/home/www/site/static/file/的内容.

或者根据后缀名提供静态文件服务:

 location ~ \.(jpg|jpeg|png|gif)$ {  
        root  /home/www/site;
        expires 1d;  
  
}  

expires用于设置缓存失效时间, 在首次访问静态文件时文件将被读入缓存. 在缓存失效前对该文件的访问都将直接从缓存中读取.

在http下设置sendfile on;启动sendfile加速. sendfile是Linux2.0之后加入的系统调用, 传统文件传输过程为

disk->kernel buffer->user buffer->socket buffer (kernel)->send

sendfile将减少不必要的内核态-用户态切换以及拷贝过程, 直接由硬盘读入socket buffer:

disk -> socket buffer (kernel) -> send

websocket

从nginx1.3开始, nginx可以为websocket提供反向代理:

http {
    # websocket
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''        close;
    }
    
    server {
        listen 80;
        server_name ws.site.cn;
        location / {
            proxy_pass http://127.0.0.1:8002;
            # add necessary header for websocket
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
}

只需要配置map并添加两个必要的header即可.

1. Nginx简介 1.1. 什么是nginx 1.2. Nginx的优点 1.3. 哪里使用到nginx 1.4. Nginx和Apache的区别 2. 安装Nginx服务器 2.1. 在windows上安装 2.2. 在Linux上安装 2.2.1. 写在前面 2.2.2. 准备使用yum安装nginx的运行环境 2.2.3. 安装pcre 2.2.4. 安装zlib库 2.2.5. 安装nginx 2.2.6. 控制nginx 2.2.7. nginx安装服务 3. Nginx配置文件详解 3.1. Nginx的主配置文件概述 3.1.1. 认识配置文件 3.1.2. nginx配置文件结构 3.1.3. nginx的全局配置 3.2. events配置 3.3. http的配置 3.4. nginx重要指令之location 4. nginx中的rewrite 4.1. 什么是rewrite 4.2. rewrite的命令的作用域和优先级 4.3. if指令 4.3.1. if指令的语法 4.3.2. if指令中使用的逻辑运算符 4.3.3. If指令中可以使用的变量 4.3.4. if指令实例 4.4. rewrite指令 4.4.1. rewrite指令语法 4.4.2. flag标记 4.4.3. set指令 4.4.4. return指令 4.4.5. rewrite实例 5. nginx的虚拟主机 5.1. 什么是nginx的虚拟主机 5.2. 标准的虚拟主机配置 5.3. 规划虚拟主机的配置文件 6. 动静分离 7. nginx的反向代理 7.1. 什么是反向代理 7.2. 明确两个概念 7.3. 特点 7.4. 反向代理的配置 7.5. 可以将代理配置单独放在一个配置文件中 8. nginx的负载均衡(自学) 8.1. 什么是负载均衡 8.2. 负载均衡的优点 8.3. 负载均衡的分配策略 8.4. 负载均衡配置 9. 安装PHP 10. PHP-FPM 10.1. 什么是PHP-FPM 10.2. 为什么要是使用PHP-FPM 10.3. 安装并且启动PHP-FPM 10.3.1. 安装 10.3.2. fpm的配置 10.3.3. 启动和停止 10.3.4. 自启动php-fpm 10.3.5. 检查php-fpm是否启动 10.4. nginx使用php-fpm处理php
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值