阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx的介绍和使用

409次阅读
没有评论

共计 7523 个字符,预计需要花费 19 分钟才能阅读完成。

1. 什么是 Nginx
Nginx(发音同 engine x)是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行。由俄罗斯的程序设计师 Igor Sysoev 所开发,最初供俄国大型的入口网站及搜寻引擎 Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页伺服器中表现较好. 目前中国大陆使用 nginx 网站用户有:新浪、网易、腾讯, 另外知名的微网志 Plurk 也使用 nginx。

优点:

(1)Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。Nginx 的 1.2.6 稳定版已经于 2012 年 12 月 11 日发布,[1]1.3.10 开发版已经于 2012 年 12 月 25 日发布,如果新建站点,建议使用最新稳定版作为生产版本,已有站点升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。
(2)Nginx 是一个很强大的高性能 Web 和反向代理服务器,它具有很多非常优越的特性:
在高连接并发的情况下,Nginx 是 Apache 服务器不错的替代品:Nginx 在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型。
(3)Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 采用 C 进行编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好很多。
作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last. fm 描述了成功并且美妙的使用经验。
(4)Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持 perl 语法),Bugs 非常少的服务器:Nginx 启动特别容易,并且几乎可以做到 7 *24 不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

2. 下载和安装 Nginx
Nginx 的官方网站是 http://nginx.org/cn/,英文主页为 http://nginx.net,从这里可以获得 Nginx 的最新版本信息。Nginx 有三个版本:稳定版、开发版和历史稳定版。开发版更新较快,包含最新的功能和 bug 的修复,但同时也可能会遇到新的 bug,开发版一旦更新稳定下来,就会被加入稳定版分支中。然而有些新功能不一定会被加到旧的稳定版中去。稳定版本更新较慢,但是 bug 较少,可以作为生产环境的首选,因此通常建议使用稳定版。历史稳定版本为以往稳定版本的汇总,不包含最新的功能。
这里选择当前的稳定版本 nginx-0.7.65 作为介绍对象,开始介绍编译安装。在安装 Nginx 之前,确保系统已经安装了 gcc、openssl-devel、pcre-devel 和 zlib-devel 软件库。
Linux 开发库是在安装系统时通过手动选择安装的,gcc、openssl-devel、zlib-devel 三个软件库可以通过安装光盘直接选择安装得到,而 pcre-devel 库默认不在系统光盘中,所以这里重点介绍 pcre-devel 库。
安装 Nginx 所需的 pcre-devel 库
安装 pcre 库是为了使 Nginx 支持 HTTP Rewrite 模块。下面进行安装,过程如下。

[root@localhost home]# tar zxvf pcre-8.02.tar.gz 
[root@localhost home]# cd pcre-8.02 
[root@localhost pcre-8.02]#./configure 
[root@localhost pcre-8.02]#make 
[root@localhost pcre-8.02]#make install 
开始安装 Nginx
 Nginx 的安装非常简单。在默认情况下,经过编译安装的 Nginx 包含了大部分可用模块。可以通过“./configure  –help”选项设置各个模块的使用情况,例如对不需要的 http_ssi 模块,可通过“–without-http_ssi_module”方式关闭此模块;同理,如果需要“http_perl”模块,那么可以通过“–with-http_perl_module”方式安装此模块。下面是安装过程:

[root@localhost home]# tar zxvf nginx-0.7.65.tar.gz 
[root@localhost home]#cd nginx-0.7.65 
[root@localhostnginx-0.7.65]#./configure \ 
–with-http_stub_status_module  –prefix=/opt/nginx 
[root@localhost nginx-0.7.65]#make 
[root@localhost nginx-0.7.65]#make install

在上面的 configure 选项中“–with-http_stub_status_module”可以用来启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的当前状态。
至此,Nginx 已经安装完成了。

 

3.Nginx 配置
Nginx 的配置文件是一个纯文本文件,它一般位于 Nginx 安装目录的 conf 目录下,整个配置文件是以 block 的形式组织的。每个 block 一般以一个大括号“{}”来表示,block 可以分为几个层次,整个配置文件中 Main 指令位于最高层,在 Main 层下面可以有 Events、HTTP 等层级,而在 HTTP 层中又包含有 Server 层,即 server block,server block 中又可分为 location 层,并且一个 server block 中可以包含多个 location block。
一个完整的配置文件结构如下图所示。

在了解完配置文件结构之后,就可以开始配置和调试 Nginx 了。

 

nginx.conf 的配置文件详解如下:

# 开启进程数 <=CPU 数
worker_processes 1;

# 错误日志保存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

# 进程号保存文件
#pid logs/nginx.pid;

# 等待事件
events {
# 每个进程最大连接数(最大连接 = 连接数 x 进程数)
worker_connections 1024;
}

http {
# 文件扩展名与文件类型映射表
include mime.types;

# 默认文件类型
default_type application/octet-stream;

# 日志文件输出格式 这个位置相于全局设置
#log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
# ‘$status $body_bytes_sent “$http_referer” ‘
# ‘”$http_user_agent” “$http_x_forwarded_for”‘;

# 请求日志保存位置
#access_log logs/access.log main;

# 打开发送文件
sendfile on;
#tcp_nopush on;

# 连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;

# 打开 gzip 压缩
#gzip on;

# 设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

# 设定负载均衡的服务器列表
upstream myproject {
#weigth 参数表示权值,权值越高被分配到的几率越大
#max_fails 当有 #max_fails 个请求失败,就表示后端的服务器不可用,默认为 1,将其设置为 0 可以关闭检查
#fail_timeout 在以后的 #fail_timeout 时间内 nginx 不会再把请求发往已检查出标记为不可用的服务器
# 这里指定多个源服务器,ip: 端口,80 端口的话可写可不写
server 192.168.1.78:8080 weight=5 max_fails=2 fail_timeout=600s;
#server 192.168.1.222:8080 weight=3 max_fails=2 fail_timeout=600s;
}

# 第一个虚拟主机
server {
# 监听 IP 端口
listen 80;

# 主机名
server_name localhost;

# 设置字符集
#charset koi8-r;

# 本虚拟 server 的访问日志 相当于局部变量
#access_log logs/host.access.log main;

# 对本 server”/” 启用负载均衡
location / {
#root /root; #定义服务器的默认网站根目录位置
#index index.php index.html index.htm; #定义首页索引文件的名称
proxy_pass http://myproject; #请求转向 myproject 定义的服务器列表

# 以下是一些反向代理的配置可删除.
# proxy_redirect off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# client_max_body_size 10m; #允许客户端请求的最大单文件字节数
# client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
# proxy_connect_timeout 90; #nginx 跟后端服务器连接超时时间(代理连接超时)
# proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
# proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
# proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
# proxy_buffers 4 32k; #proxy_buffers 缓冲区,网页平均在 32k 以下的话,这样设置
# proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
# proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从 upstream 服务器传
}
location /upload {
alias e:/upload;
}
# 设定查看 Nginx 状态的地址
location /NginxStatus {
stub_status on;
access_log off;
#allow 192.168.0.3;
#deny all;
#auth_basic “NginxStatus”;
#auth_basic_user_file conf/htpasswd;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /\.ht {
# deny all;
#}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# 多监听
# listen 8000;
# 主机名
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
#WEB 文件路径
# root html;
# 默认首页
# index index.html index.htm;
# }
#}

# HTTPS server HTTPS SSL 加密服务器
#
#server {
# listen 443;
# server_name localhost;

# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_timeout 5m;

# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}
}

 

4.nginx 启动,重启,关闭命令
停止操作
停止操作是通过向 nginx 进程发送信号(什么是信号请参阅 linux 文 章)来进行的
步骤 1:查询 nginx 主进程号
ps -ef | grep nginx
在进程列表里 面找 master 进程,它的编号就是主进程号了。
步骤 2:发送信号
从容停止 Nginx:
kill -QUIT 主进程号
快速停止 Nginx:
kill -TERM 主进程号
强制停止 Nginx:
pkill -9 nginx

另外,若在 nginx.conf 配置了 pid 文件存放路径则该���件存放的就是 Nginx 主进程号,如果没指定则放在 nginx 的 logs 目录下。有了 pid 文 件,我们就不用先查询 Nginx 的主进程号,而直接向 Nginx 发送信号了,命令如下:
kill - 信号类型 ‘/usr/nginx/logs/nginx.pid’

平滑重启
如果更改了配置就要重启 Nginx,要先关闭 Nginx 再打开?不是的,可以向 Nginx 发送信号,平滑重启。
平滑重启命令:
kill -HUP 住进称号或进程号文件路径

或者使用

/usr/nginx/sbin/nginx -s reload

 

注意,修改了配置文件后最好先检查一下修改过的配置文件是否正 确,以免重启后 Nginx 出现错误影响服务器稳定运行。判断 Nginx 配置是否正确命令如下:
nginx -t -c /usr/nginx/conf/nginx.conf

或者

/usr/nginx/sbin/nginx -t

平滑升级
如果服务器正在运行的 Nginx 要进行升级、添加或删除模块时,我们需 要停掉服务器并做相应修改,这样服务器就要在一段时间内停止服务,Nginx 可以在不停机的情况下进行各种升级动作而不影响服务器运行。
步骤 1:
如 果升级 Nginx 程序,先用新程序替换旧程序文件,编译安装的话新程序直接编译到 Nginx 安装目录中。
步 骤 2:执行命令
kill -USR2 旧版程序的主进程号或进程文件名
此时旧的 Nginx 主进程将会把自己的进程文件改名为.oldbin,然后执行新版 Nginx。新旧 Nginx 会同市运行,共同处理请求。
这时要逐步停止旧版 Nginx,输入命令:
kill -WINCH 旧版主进程号
慢慢旧的工作进程就都会随着任务执行完毕而退出,新版的 Nginx 的工作进程会逐渐取代旧版 工作进程。

此 时,我们可以决定使用新版还是恢复到旧版。
不重载配置启动新 / 旧工作进程
kill -HUP 旧 / 新版主进程号
从容关闭旧 / 新进程
kill -QUIT 旧 / 新主进程号
如果此时报错,提示还有进程没有结束就用下面命令先关闭旧 / 新工作进程,再关闭主进程号:
kill -TERM 旧 / 新工作进程号

这样下来,如果要恢复到旧版本,只需要上面的几个步 骤都是操作新版主进程号,如果要用新版本就上面的几个步骤。

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

Ubuntu 16.04 下安装部署 Nginx+uWSGI+Django1.9.7  http://www.linuxidc.com/Linux/2016-07/133484.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Ubuntu 16.04 源码编译安装 Nginx 1.10.0  http://www.linuxidc.com/Linux/2016-08/134080.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134441.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计7523字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7982818
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...