Nginx服务器搭建和基本配置详解

nginx

Nginx(engine X) 是一个高性能的 HTTP 服务器和反向代理服务器,这款软件开发的目的是为了解决 C10k 问题。

Nginx 的架构利用了许多现代操作系统的特性,以实现一个高性能的 HTTP 服务器。例如在 Linux 系统上,Nginx 使用了 epoll,sendfile,File AIO,DIRECTIO 等机制,使得 Nginx 不仅性能高效,而且资源占用率非常低,官方宣称 nginx 维持 10000 个非活动的 HTTP keep-alive 连接仅需要 2.5M 内存。

Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以 root 用户身份运行,而worker、cache loader 和 cache manager 均应以非特权用户身份运行。

系统平台:CentOS release 6.6 (Final) 64位。

一、安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

二、首先要安装 PCRE

PCRE 作用是让 Ngnix 支持 Rewrite 功能。

1、下载 PCRE 安装包

[[email protected] ~]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

2、解压,进入安装包目录

[[email protected] ~]# tar xf pcre-8.35.tar.gz

[[email protected] ~]# cd pcre-8.35

3、编译安装

[[email protected] pcre-8.35]# ./configure && make && make install

4、查看pcre版本

[[email protected] pcre-8.35]# pcre-config --version

8.35

三、安装nginx

1、下载nginx安装包

[[email protected] ~]# wget http://nginx.org/download/nginx-1.9.5.tar.gz

2、解压,进入安装包目录

[[email protected] ~]# tar xf nginx-1.9.5.tar.gz

[[email protected] ~]# cd nginx-1.9.5

3、创建 nginx 运行使用的用户

[[email protected] nginx-1.9.5]# /usr/sbin/groupadd nginx

[[email protected] nginx-1.9.5]# useradd -g nginx nginx

4、编译安装

常用编译参数

--prefix=PATH:指定 nginx 的安装目录

--conf-path=PATH:指定 nginx.conf 配置文件路径

--user=NAME:nginx 工作进程的用户

--with-pcre:开启 PCRE 正则表达式的支持

--with-http_ssl_module:启动 SSL 的支持

--with-http_stub_status_module:用于监控 Nginx 的状态

--with-http-realip_module:允许改变客户端请求头中客户端 IP 地址

--with-file-aio:启用 File AIO

--add-module=PATH:添加第三方外部模块

这里提供一个完整的编译方案:

[[email protected] nginx-1.9.5]# ./configure --prefix=/usr/local/nginx \

--conf-path=/usr/local/nginx/conf/nginx.conf \

--error-log-path=/usr/local/nginx/log/error.log \

--http-log-path=/usr/local/nginx/log/access.log \

--http-client-body-temp-path=/usr/local/nginx/client_body \

--http-proxy-temp-path=/usr/local/nginx/proxy \

--http-fastcgi-temp-path=/usr/local/nginx/fastcgi \

--http-uwsgi-temp-path=/usr/local/nginx/uwsgi \

--pid-path=/usr/local/nginx/log/nginx.pid \

--lock-path=/usr/local/nginx/log/nginx \

--user=nginx \

--group=nginx \

--with-file-aio \

--with-http_ssl_module \

--with-http_realip_module \

--with-http_sub_module \

--with-http_gzip_static_module \

--with-http_stub_status_module \

--with-pcre

[[email protected] nginx-1.9.5]# make && make install

5、查看nginx版本

[[email protected] nginx-1.9.5]# /usr/local/nginx/sbin/nginx -v

nginx version: nginx/1.9.5

注意:在这可能会报错

/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

这是因为缺少库文件,确认安装好pcre软件(nginx 依赖该软件),创建软连接即可

[[email protected] nginx-1.9.5]# ls /lib/ |grep pcre

[[email protected] nginx-1.9.5]# ls /lib64/ |grep pcre

libpcre.so.0

libpcre.so.0.0.1

[[email protected] nginx-1.9.5]# ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1

6、启动和关闭

检查配置文件ngnix.conf的正确性命令:

# /usr/local/nginx/sbin/nginx -t

启动 nginx:

# nginx -c /etc/nginx/nginx.conf

关闭 nginx

# nginx -s stop

重读配置文件

# nginx -s reload

# pkill -HUP nginx

重新打开日志文件

# nginx -s reopen

# pkill -USR1 nginx

四、nginx.conf 配置文件

Nginx 配置文件主要分成四部分:main(全局设置)、http(HTTP 的通用设置)、server(虚拟主机设置)、location(匹配 URL 路径)。还有一些其他的配置段,如 event,upstream 等。

1、通用设置

user nginx

指定运行 nginx workre 进程的用户和组

worker_rlimit_nofile #

指定所有 worker 进程能够打开的最大文件数

worker_cpu_affinity

设置 worker 进程的 CPU 粘性,以避免进程在 CPU 间切换带来的性能消耗。如 worker_cpu_affinity 0001 0010 0100 1000;(四核)

worker_processes 4

worker 工作进程的个数,这个值可以设置为与 CPU 数量相同,如果开启了 SSL 和 Gzip,那么可以适当增加此数值

worker_connections 1000

单个 worker 进程能接受的最大并发连接数,放在 event 段中

error_log logs/error.log info

错误日志的存放路径和记录级别

use epoll

使用 epoll 事件模型,放在 event 段中

2、http 服务器

server {}:

定义一个虚拟主机

listen 80;

定义监听的地址和端口,默认监听在本机所有地址上

server_name NAME [...];

定义虚拟主机名,可以使用多个名称,还可以使用正则表达式或通配符。

sendfile on

开启 sendfile 调用来快速的响应客户端

keepalive_timeout 65

长连接超时时间,单位是秒。

send_timeout

指定响应客户端的超时时间

client_max_body_size 10m

允许客户端请求的实体最大大小

root PATH

设置请求 URL 所对应资源所在文件系统上的根目录

location [ = | ~ | ~* | ^~ ] URI { ... }

设置一个 URI 匹配路径

=:精确匹配

~:正则表达式匹配,区分字符大小写

~*:正则表达式匹配,不区分字符大小写

^~:URI 的前半部分匹配,且不实用正则表达式

优先级:

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

allow 和 deny

基于 IP 访问控制,如:

仅允许 192.168.0.0/24 网段客户端访问

allow 192.168.0.0/24;

deny all;

stub_status on

开启状态显式,仅能用于 location 中:

开启状态显式页面

location /status {

stub_status on;

allow 172.16.0.0/16;

deny all;

}

rewrite <REGEX> <REPL> <FLAG>

URL 重写,可以使用多种标记

例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;

可用的 flag:

- last:重写完成后,继续匹配其他 rewrite 规则

- break:重写完成后不再继续匹配

- redirect:返回 302 重定向(临时重定向),客户端对重定向的 URL 发起新的请求

- permanent:返回 301 重定向(永久重定向),客户端对重定向的 URL 发起新的请求

一个 server 配置示例:

server {

listen  80;

server_name localhost;

root /web/htdocs;

location / {

index index.html index.htm;

}

location /status {

stub_status on;

allow 10.0.0.0/8;

deny all;

access_log off;

}

3、SSL 的配置

启用一个 SSL 虚拟主机

server {

listen 443;

server_name example.com;

root /apps/www;

index index.html index.htm;

ssl on;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

#  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

#  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

#  ssl_prefer_server_ciphers on;

}

其中 ssl_certificate 表示 CA 文件,ssl_certificate_key 表示密钥文件。

如果想把 http 请求强制转到 https,可以这样:

server {

listen  80;

server_name example.me;

return 301 https://$server_name$request_uri;

}

4、nginx 做负载均衡反向代理

nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字。在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数。

例如:

upstream backend {

server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10;

server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;;

}

默认请求下,使用 round-robin 调度算法,并有健康状态检查和恢复主机的能力。

ningx 还可以使用这些算法:

ip_hash:基于源地址哈希,主要目的是会话保持

least_conn:基于最少活动连接进行调度

sticky:基于 cookie 进行会话绑定,nginx 会在客户端第一次访问时插入路由信息到 cookie 中,或者选择 cookie 中的某个字段的值作为键,以后每次请求将基于此信息进行调度

基于 cookie 的会话绑定共有 cookie,route 和 learn 三种。

例如,基于 cookie name 的调度:

upstream backend {

server backend1.example.com;

server backend2.example.com;

sticky cookie srv_id expires=1h domain=.example.com path=/;

}

使用此主机组进行反向代理:

location / {

proxy_pass http://backend;

proxy_set_header Host $host;

proxy_set_haeder X-Forwared-For $proxy_add_x_forwarded_for;

}

proxy_pass URL 指定代理的后端主机,可以指定 "http" 或 "https" 协议,域名可以是 ip 地址,也可以是 upstream 池名字

如果代理指定的是一个 URI 地址,如 http://127.0.0.1/remote,那么将直接被代理至指定 URI,无论请求的 URI 是什么

如果代理指定的一个主机而没有 URI,如 http://127.0.0.1,客户端请求的URI将被传递至指定域名

如果 location 中使用模式匹配 url,那么 url 也会被传递至代理 URL 的末端

如果 location 中使用了 URI 重写,那么 proxy_pass 会使用重写后的结果进行处理

proxy_set_header HEADER VALUE 对转发的报文首部进行修改

5、反向代理时的缓存相关设定

proxy_cache_path PATH [levels=levels] keys_zone=NAME:SIZE

定义磁盘缓存路径,nignx 的缓存是以键值方式存放的,keys_zone 用于指定键存放的内存空间名字和大小,对应的值则存放在 PATH 指定的路径中。levels 可以指定缓存存放路径的级数和名称字符数。此设置只能在 http 段中定义。

如:

proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=one:10m;

proxy_cache_valid [code ...] time 指定不同响应码的内容的缓存时间

如:

proxy_cache_valid 200 302 10m;

proxy_cache_valid 404  1m;

proxy_cache_valid any  1m;

proxy_cache_method METHOD 定义哪些方法的请求结果可以被缓存,如:

proxy_cache_method GET;

proxy_cache_method HEAD;

proxy_cache NAME 指定使用预先定义的缓存空间用于缓存

6、 fastCGI 代理的设置

使用 fastCGI 时,设置代理的方法同 porxy_pass 类似,同时还可以使用 fastCGI 缓存,设置的方法也和 proxy_cache 类似。

location ~ \.php$ {

root   /web/htdocs;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include  fastcgi_params;

}

7、一些常用内置变量

$arg_name:请求 uri 中的 name 参数至

$args:请求 uri 的所有参数,和 $query_string 相同

$uri:当前请求的 uri,不带参数

$request_uri:请求的 uri,带完整参数

$host:http 请求报文中 host 首部,如果没有 host 首部,则以处理此请求的虚拟主机的主机名替代

$hostname:nginx 服务运行在主机的主机名

$remote_addr:客户端 IP

$remote_port:客户端 port

$remote_user:使用用户认证时客户端用户输入的用户名

$request_filename:用户请求中的 URI 经过本地 root  或 alias 转换后映射的本地的文件路径

$request_method:请求方法

$server_addr:服务器地址

$server_name:服务器名称

$server_port:服务器端口

$server_protocol:服务器向客户端发送响应时的协议,如 http/1.1,http/1.0

$scheme:在请求中使用的 scheme,如 https://www.baidu.com/ 中的 https

$http_name:匹配请求报文中的指定 HEADER,如 $http_host 匹配请求报文中的 host 首部

$sent_http_name:匹配响应报文中指定的 HEADER,例如 $sent_content_type 匹配响应报文中的 content-type 首部

$status:响应状态

Nginx中文参考文档

http://tool.oschina.net/apidocs/apidoc?api=nginx-zh

Nginx配置与应用详解

http://developer.51cto.com/art/201004/194472.htm

Nginx开发从入门到精通

http://tengine.taobao.org/book/index.html

时间: 2024-10-03 08:11:11

Nginx服务器搭建和基本配置详解的相关文章

Linux - CentOS6.5服务器搭建与初始化配置详解(下)

传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 输入root和之前配置的密码 第一步先把防火墙给光了 iptables -F  命令用于清空规则 这里插一条命令(这个命令我忘记打上去了) /etc/init.d/iptables save  用于保存当前被清空的规则 chkconfig  iptables  stop  开机不允许启动防火墙 c

Windows下Nginx Virtual Host多站点配置详解

Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 windows7配置Nginx+php+mysql教程. 先说明一下配置多站点的目的:在生产环境中,如果将系统所有代码文件都放在公开目录中,则很容易被查看到系统源码,这样是很不安全的,所以需要只公开index.php的入口文件目录.而同一个服务器中,可能运行多个系统,这样就必须公开多个入口文件目录,以便用不同的

Nginx+Tomcat的服务器端环境配置详解

这篇文章主要介绍了Nginx+Tomcat的服务器端环境配置详解,包括Nginx与Tomcat的监控开启方法,需要的朋友可以参考下 Nginx+tomcat是目前主流的Javaweb架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.Java JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-Linux-x64.tar.gz ? 1 tar -xzf jdk-7u25-linux

NFS服务器原理和安装配置详解附案例演练

NFS服务器原理和安装配置详解附案例演练 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利: 2.NFS挂载原理 NFS服务器的挂载结构图: 如上图示: 当我们在NFS服务器设置好一个共享目录/home/public后

struts2-环境搭建-访问流程-配置详解-常量配置-类详解

1 struts2概述 1.1 概念  1.2 struts2使用优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 struts2具有更加先进的架构以及思想 struts2的历史 struts2与struts1区别就是技术上没有什么关系. struts2的前身时webwork框架. 2 搭建struts2框架 2.1.导包 怎么快速找到要导入的包?! 路径: \struts2-day01\resource\struts-2.3.24\apps\s

正向代理/反向代理理解、Nginx概述、安装及配置详解

一.Nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现.这里主要通过三个方面简单介绍nginx:反向代理.负载均衡.nginx特点 1.反向代理 关于代理:说到代理,首先我们要明确一个概念,所谓代理就是一个代表.一个渠道: 此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问

Nginx的工作原理和配置详解

一.Nginx简介 Nginx (pronounced engine-x) is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. Igor Sysoev started development of Nginx in 2002, with the first public release in 2004. Nginx now hos

(总结)CentOS Linux搭建SVN Server配置详解

PS:今天给开发的同事搭建一个公网的SVN Server,google一下,发现下面这篇最详细,就记录下来,重新排版一下.顺便根据自己的使用经验,补充了几个细节和总结.本文配置是基于CentOS 5.x的,但一样适用于其他Linux发行版! SVN简介和工作原理 subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和windows,但较多安装在linux下. svn服务器有两种运行

Nginx干货(二)配置详解

此篇就不矫情了.直接上个配置吧.以后若有更新,继续修补 /usr/local/nginx/conf目录下面的nginx.conf文件 以用户nginx的身份来运行 user nginx; 启动进程,通常设置成和cpu数量相等 worker_processes 10; 全局错误日志 error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; Pid文件存放路径 pid /var/