nginx 的安装

下载地址: http://nginx.org/download/nginx-1.4.2.tar.gz

安装准备: nginx依赖于pcre库,要先安装pcre(正则的库)

yum install pcre

yum install pcre-devel

注意:1. 如果在./configure 提示某个库没有装,但是我们yum 之后提示该库已经装了,Nothing to do,此时我们在后面添加一个 -devel.

     2. ./configure: error: C compiler cc is not found如果出现这个错误,则 yum -y install gcc gcc-c++ autoconf automake make

安装:

cd /usr/local/src/

wget http://nginx.org/download/nginx-1.4.2.tar.gz

tar -zxvf nginx-1.4.2.tar.gz

cd nginx-1.4.2

./configure --prefix=/usr/local/nginx  (一致性哈希的东西没装)

make && make install

222222

nginx目录结构:

cd /usr/local/nginx, 看到如下4个目录

./

....conf 配置文件

... html 网页文件

...logs  日志文件

...sbin  主要二进制程序

启动:

33333

[root@localhost nginx]# ./sbin/nginx

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

....

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] still could not bind()

报错:不能绑定80端口,80端口已经被占用

(有时是自己装了apache,nginx等,还有更多情况是操作系统自带了apache并作为服务启动)

解决: 把占用80端口的软件或服务关闭即可.

444

-antp,加上p,我们可以看到80端口到底是哪个程序占用了,最后一列,httpd,明显是apache

5555

把进程杀杀死

pkill -9 http  该命令是干啥的
Nginx的信号控制

TERM,
INT

Quick
shutdown(紧急的杀掉,轻易不要这么用)

QUIT

Graceful
shutdown  优雅的关闭进程,即等请求结束后再关闭(在apache中也有这个概念,

比如有一个Worker进程没有在工作,那么直接杀掉,如果有一个Worker进程正在处理请求,那么我

先不杀掉它,等它处理完了,就不要再接受请求了,我再把它杀掉,最后主进程也消亡了。)

HUP

Configuration
reload ,Start the new worker processes with

a new configuration Gracefully shutdown the
old worker processes

改变配置文件,平滑的重读配置文件(apache改了配置文件,需要重启主进程,从这里我们可以看出

如果使用信号量HUP,Nginx并不需要重启主进程这一点是Nginx很大的优点。机制是会开启新的

Worker进程,去读取新的配置文件,然后再优雅的关闭旧的进程,最后旧进程慢慢的都没了,新进程

慢慢的就多了,而且新进程是读取的新的配置文件)

USR1

Reopen
the log files 重读日志,在日志按月/日分割时有用(在linux中,有inode的概念,文

件名只是一个表象,当nginx在往一个日志文件中写东西的时候,如果我们想要nginx换一个文件写

,不要在原来的文件中写了。有的人考虑到,我们给原来的日志文件换一个名字,mv access.log

access.log.back,然后再创建一个touch
access.log,就可以了,但是实际上是不行的,虽然

我们的文件名字换了,但是nginx写日志的位置仍然是那块磁盘位置(也就是说nginx是在向某一个

iNode写,但是nginx在读取配置文件的时候,虽然获取的是文件名,但是实际上提取的是文件名

所对应的inode,所以配置文件需要重读),即使我们删除这个文件也是不行的,因为那块inode不可

能被删,新文件的大小是不可能会变的)

USR2

Upgrade
Executable on the fly 平滑的升级

WINCH

Gracefully
shutdown the worker processes 优雅关闭旧的进程(配合USR2来进行升级)

具体语法:

Kill -信号选项 nginx的主进程号

Kill -HUP 4873

Kill -信号控制 `cat
/xxx/path/log/nginx.pid`

Kil; -USR1 `cat /xxx/path/log/nginx.pid`

66666

检测配置文件:一般在启动之前,执行一下这个命令,进行检测配置文件

99

Nginx配置段

// 全局区
worker_processes 1; // 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数

101010

Event {

// 一般是配置nginx连接的特性

// 如1个work能同时允许多少连接

worker_connections  1024; // 这是指 一个子进程最大允许连1024个连接

}

http {  //这是配置http服务器的主要段

Server1 { // 这是虚拟主机段

//监听某一个端口或域名,把它映射到某一个目录中去,本例中的nginx装在/var/local/nginx/

Location {  //定位,把特殊的路径或文件再次定位 ,如image目录单独处理

}             /// 如.php单独处理

}

Server2 {

}

….

}

例子1: 基于域名的虚拟主机

server {

listen 80;  #监听端口

server_name a.com; #监听域名(如果测试,需要修改host文件,博客中有相关内容)

location / {

//root可以写相对目录,相对的是nginx的根目录,也可以写绝对路径,而且绝对路径不限于在nginx目录下,下面的例子就是绝对路径,但是并不是在nginx的目录中

root /var/www/a.com;   #根目录定位

index index.html;

}

}

例子2: 基于端口的虚拟主机配置

server {

listen 8080;

//server_name z.com;(视频中sever_name用的是z.com)

server_name 192.168.1.204;

location / {

root /var/www/html8080;

index index.html;

}

}

例子3: 基于IP的虚拟主机配置

server {

listen 80;

server_name 192.168.1.204;

location / {

root html/ip;

index index.html;

}

}

日志管理

我们观察nginx的server段,可以看到如下类似信息

#access_log  logs/host.access.log  main;

这说明 该server, 它的访问日志的文件是  logs/host.access.log ,

使用的格式”main”格式.

除了main格式,你可以自定义其他格式.

main格式是什么?

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

#                  '$status $body_bytes_sent "$http_referer" '

#                  '"$http_user_agent" "$http_x_forwarded_for"';

main格式是我们定义好一种日志的格式,并起个名字,便于引用.

以上面的例子, main类型的日志,记录的 remote_addr.... http_x_forwarded_for等选项.

1: 日志格式 是指记录哪些选项

默认的日志格式: main

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

'"$http_user_agent":我们想要访问一个网页,浏览器代我们发送请求,所以浏览器被称为用户代理,该字段记录的就是,用户的浏览器是什么,机器的系统是什么。

http_x_forwarded_for:如果用户使用代理服务器来访问某一个网站,代理服务器有可能又通过代理服务器访问网站,那么每经过一个代理服务器,都会修改$http_x_forwarded_for,最终服务器会取最后一次的$http_x_forwarded_for。这样,我们就可能看到来自朝鲜的用户发表评论的现象了。如果web服务器选择使用$remote_addr来判断用户来自哪里,此时主动权在服务器端,我们可以通过remote_addr来判断访问者到底来自哪里。

蜘蛛协议非强制的,只能靠道德去制约

注意:如果我们的虚拟主机(server)没有配置日志,那么系统就会默认的使用main格式日志,并且访问日志会放在logs/access.log中,如果我们配置了访问日志,那当然就是使用我们配置的格式喽

如默认的main日志格式,记录这么几项

远程IP- 远程用户/用户时间 请求方法(如GET/POST) 请求体body长度 referer来源信息

http-user-agent用户代理/蜘蛛 ,被转发的请求的原始IP

http_x_forwarded_for:在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP

2: 声明一个独特的log_format并命名

如果这种日志格式我们觉得不好,我们也可以自己任意组合这几个变量,也可以删除几个,自己配一套日志格式

log_format  mylog '$remote_addr- "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

在下面的server/location,我们就可以引用 mylog

在server段中,这样来声明

Nginx允许针对不同的server做不同的Log ,(有的web服务器不支持,如lighttp)

access_log logs/access_8080.log mylog;

声明log   log位置          log格式;

实际应用: shell+定时任务+nginx信号管理,完成日志按日期存储

分析思路:

凌晨00:00:01,把昨天的日志重命名,放在相应的目录下

再USR1信息号控制nginx重新生成新的日志文件

具体脚本:

#!/bin/bash

base_path='/usr/local/nginx/logs'

log_path=$(date -d yesterday +"%Y%m")

day=$(date -d yesterday +"%d")

mkdir -p $base_path/$log_path

mv $base_path/access.log $base_path/$log_path/access_$day.log

#echo $base_path/$log_path/access_$day.log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

linux如何更改系统时间

11

定时任务

Crontab 编辑定时任务

crontab –e

12

分 时 日 月 周 命令

01 00 * * * /xxx/path/b.sh  每天0时1分(建议在02-04点之间,系统负载小)

Nginx(一):安装的更多相关文章

  1. Nginx服务安装配置

    1.Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器,由俄罗斯人开发的,第一个版本发布于2004年10月4日.Nginx由于出色的性能,在世界范围内受到了越来越多人的关注,其特点是占有 ...

  2. Django Nginx+uwsgi 安装配置

    使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,我们需要一个可以稳定而持续的服务器,比如apache, Nginx, lighttp ...

  3. mysql 自动备份和nginx自动安装脚本

    一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...

  4. nginx的安装

    1,,nginx的安装 为什么使用nginx我就不多说了,很优秀的,请再行google 在安装前,先安装pcre,安装zlib,安装openssl,以及一些其他包 yum install -y gcc ...

  5. nginx编译安装

    Nginx编译安装 1.nginx官网:http://wiki.nginx.org/Install下载:http://nginx.org/en/download.html 2.编译安装# wget h ...

  6. nginx 的安装

    一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # yum install pcre* //如过你已经装了,请跳过这一步 2.安装openssl ...

  7. linux/centos下安装nginx(rpm安装和源码安装)详细步骤

    Centos下安装nginx rpm包                                                                                 ...

  8. nginx的安装与配置

    1.nginx的安装与配置 编译安装nginx需要实现安装开发包组“Development tools”和“Server Platform Development”.“Desktop Platform ...

  9. nginx笔记----安装

    nginx的安装 ./configure make && make install (一)准备条件: 1.GCC---gun编译器集合 Nginx是一个由C语言编写的程序,因此首先需要 ...

  10. Linux下Nginx的安装、升级及动态添加模块

    系统基于ubuntu server 14.04.4 amd64 安装 第一步 下载并解压Nginx压缩包 从Nginx官网下载Nginx,或者在Linux上执行wget http://nginx.or ...

随机推荐

  1. grunt-nodemon参数配置

    grunt-nodemon参数配置 nodemon0.2.0版本后参数名称做了较大改动,调整了下nodemon的参数配置,有需要的同学可以参考下: 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. 【bzoj4016】[FJOI2014]最短路径树问题 堆优化Dijkstra+DFS树+树的点分治

    题目描述 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最小的那条路径( ...

  3. php-超全局变量

    下表列出了您能够在 $_SERVER 中访问的最重要的元素: 元素/代码 描述 $_SERVER[' PHP_SELF '] 返回当前执行脚本的文件名. $_SERVER[' GATEWAY_INTE ...

  4. Codeforces963B - Destruction of a Tree

    Portal Description 给出一个\(n(n\leq2\times10^5)\)个点的树,每次可以删除一个度数为偶数的点及其相连的边,求一种能够删掉整棵树的方案. Solution 简单起 ...

  5. BZOJ1879 [Sdoi2009]Bill的挑战 【状压dp】

    题目 输入格式 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. T ≤ 5,M ≤ 15,字符串长 ...

  6. POJ3928 Ping pong

      Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Description N(3<= ...

  7. 洛谷 P 3379 【模板】最近公共祖先(LCA)

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  8. 【NOIP2016后记】

    身在浙江,又跪一年 你哪次正式比赛没跪??? 有的人初三联赛一等前途光明,比如衲姐,周驿东 有的人高一联赛一等为时未晚,比如MG,罗爷爷,陈冲 有的人高二联赛一等纵情声色,比如鸟爷爷,小鸡 有的人高三 ...

  9. 转 浅谈C++中指针和引用的区别

    浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别   指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性 ...

  10. yii 数据库添加,修改,删除相关操作总结

    yii中关于数据信息的添加数据,修改数据,删除数据的相关操作,刚刚学习没几天,仅记录了一些,以后慢慢再充实,有需要的朋友可以看看. 添加数据的方法 (1)save 方法(对象形式操作) $user=n ...