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即可.

nginx配置指南的更多相关文章

  1. Nginx配置Https指南

    前言 本文是对Nginx配置SSL证书的总结. 申请SSL证书 你可以从任何证书提供商处申请证书,这里以阿里云为例. 打开阿里云SSL证书控制台,点击购买证书 选择免费型一年期的证书,点击立即购买 注 ...

  2. Nginx重写规则指南 转

    http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/ Nginx重写规则指南 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你, ...

  3. SUPERVISOR进程管理器配置指南

    SUPERVISOR进程管理器配置指南1. supervisor简介1.1. 官网http://supervisord.org/ 1.2. 介绍Supervisor是一个进程控制系统. 它是一个C/S ...

  4. 苹果ATS特性服务器证书配置指南

    配置指南: 需要配置符合PFS规范的加密套餐,目前推荐配置: ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!AD ...

  5. Confluence 6 代理和 HTTPS 详细配置指南链接

    详细配置指南 更多有关连接器示例,我们提供了一些按步骤配置的指南来帮助你启用 HTTPS 并正确配置你的代理. HTTPS: Running Confluence Over SSL or HTTPS  ...

  6. CentOS 7 个性化配置指南

    博客原文地址:CentOS 7 个性化配置指南 - Wind Spirit 0x00 前言 该教程主要安装了如下软件包 iptables MySQL PHP PHP 相关模块 Nginx 主要配置实现 ...

  7. [转] Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程

    一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合 ...

  8. Nginx配置优化详解

    如果你已经安装过Nginx并在生产环境中使用,那么Nginx配置优化你一定也要做,这样才能看到Nginx性能,本文就从基本配置优化开始到高层配置教你如何优化Nginx 大多数的Nginx安装指南告诉你 ...

  9. 入门系列之在Nginx配置Gzip

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由小铁匠米兰的v 发表于云+社区专栏 简介 网站加载的速度取决于浏览器必须下载的所有文件的大小.减少要传输的文件的大小可以使网站不仅加载 ...

随机推荐

  1. FastJSON基础

    对象的类型 json文本 json数组 json对象 java对象 类型的转换 json文本      转   json对象      JSON.parseObject(str) json文本     ...

  2. azkaban disable 停用部分工作流

    在使用azkaban作为调度工具的时候,难免遇到只需要跑工作流某部分的情况,这时需要用到停用部分工作的操作, 如图:

  3. centos7图形界面

    安装centOS7服务器版本,系统默认是不会安装GUI的图形界面程序,这个需要手动安装CentOS7 Gnome GUI包. 安装GUI包.开机自动启动图形界面.重启 # yum groupinsta ...

  4. Rabbit RPC 代码阅读(一)

    前言 因为想对RPC内部的机制作一个了解,特作以下阅读代码日志,以备忘. RPC介绍 Rabbit RPC 原理可以用3点概括: 1.服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务 ...

  5. 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引

    [源码下载] 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引 作者:webabcd 介绍背水一战 Windows 10 之 文件系 ...

  6. MyBatis 源码分析系列文章导读

    1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...

  7. 42_并发编程-JionableQueue

    一.生产者消费者模型   在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生 ...

  8. 解决SpringBoot jar包太大的问题

    转载 2017年09月18日 09:21:53 577 SpringBoot的web应用一般都添加了spring-boot-maven-plugin插件. Maven xml代码   <buil ...

  9. 外媒:比特币大陆将于9月IPO 规模或高达180亿美元

    看看你们坚持买的比特币是否值得? 北京时间8月13日上午消息,据CoinDesk获得的文件,比特币大陆将于今年9月申请首次公开募股(IPO),其规模可能高达180亿美元,市值预计在400亿美元到500 ...

  10. code128 C语言实现

    https://blog.csdn.net/walk_ing/article/details/52712641 参考链接 1,具有A.B.C三种不同的编码类型,可提供标准ASCII中128个字元(字元 ...