1.安装PCRE库
$ cd /usr/local/ $ https://sourceforge.net/projects/pcre/files/pcre/8.36/ $ tar -zxvf pcre-8.36.tar.gz $ cd pcre-8.36 $ ./configure $ make $ make install
2.安装zlib库
$ cd /usr/local/ $ wget http://zlib.net/zlib-1.2.8.tar.gz $ tar -zxvf zlib-1.2.8.tar.gz $ cd zlib-1.2.8 $ ./configure $ make $ make install
3.安装ssl
$ cd /usr/local/ $ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz $ tar -zxvf openssl-1.0.1j.tar.gz $ ./config $ make $ make install
4.安装nginx
$ cd /usr/local/ $ wget http://nginx.org/download/nginx-1.8.0.tar.gz $ tar -zxvf nginx-1.8.0.tar.gz $ cd nginx-1.8.0 $ ./configure --prefix=/usr/local/nginx $ make $ make install
5.启动
$ /usr/local/nginx/sbin/nginx报错 nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
32位系统
[root@localhost ~]# ln -s /usr/local/lib/libpcre.so.1 /lib
64位系统
[root@localhost ~]# ln -s /usr/local/lib/libpcre.so.1 /lib64
然后在启动nginx就OK了
6.重启、停止、强制关闭
$ /usr/local/nginx/sbin/nginx –s reload 重启 $ /usr/local/nginx/sbin/nginx –s stop 停止 $ /usr/local/nginx/sbin/nginx –t 测试配置文件是否正常 $ pkill nginx 强制关闭
7、配置
配置文件位于安装目录conf下
nginx/conf/nginx.conf
Nginx配置文件常见结构的从外到内依次是 http,server location等等,缺省的继承关系从外到内,也就是说内层块会自动获取外层块的值作为缺省值。
- Server
接收请求的服务器将不同请求按规则转发到不同的后端服务器上,在nginx中可以通过构建虚拟主机的概念来将这些不同的服务配置进行隔离。
server { listen 80; server_name localhost; root html; index index.html index.htm; }
- listen 指定监听端口
- server_name 指定ip或域名
- index 设定访问的默认首页地址
- root 指定虚拟主机的网页根目录,这个地方可以是相对地址或绝对地址
当server超过2个时,建议不同的虚拟主机的配置放在各自独立的文件中,通过在主配置文件nginx.conf加上include指令包含近下来,便于管理。
include vhost/*.conf
- Localtion
每个url请求都会对应一个服务,nginx进行处理转发或者是本地的一个文件路径,或者是其它服务器的一个服务路径,而这个路径匹配时通过location来进行的。我们快车将server当做对应一个域名进行的配置,而location是在一个域名下对更精细的路径进行配置。
可以将root和index指令放到一个location中,那么只有在匹配到这个location时才会访问root后的内容
location / { root /data/www/host2; index index.html index.htm; }
- location匹配规则
~ 波浪线表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般来匹配目录 = 进行普通字符精确匹配
- 匹配例子
location = / { # 只匹配"/". [ configuration A ] } location / { # 匹配任何请求,因为所有请求都是以"/"开始 # 但是更长字符匹配或者正则表达式匹配会优先匹配 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配以 gif, jpg, or jpeg结尾的请求. # 但是所有 /images/ 目录的请求将由 [Configuration C]处理. [ configuration D ] } 请求: / -> 符合configuration A /documents/document.html -> 符合configuration B /images/1.gif -> 符合configuration C /documents/1.jpg ->符合 configuration D
- 静态文件映射
访问文件的配置主要有root和aliasp's两个指令,这两个指令的区别容易能混。
alias后跟的指定目录是精准的,并且末尾必须加/
location /c/ { alias /a/; }
如果访问站点http://location/c访问的就是/a/目录下的站点信息
root后跟的指定目录是上级目录,并且该上级目录下要含有和location后指定名称的同名目录才行
location /c/ { root /a/; }
这时访问站点http://location/c访问的就是/a/c目录下的站点信息。如果你需要将这个目录展开,在这个location的末尾加上「autoindex on; 」就可以了 - 转发
配置起来很简单比如我要将所有的请求到转移到真正提供服务的一台机器的8001端口,只要这样:
location / { proxy_pass 172.16.1.1:8001; }
这样访问host时,就都被转发到 172.16.1.1的8001端口去了。 - 负载均衡
在upstream中指定了一组机器,并将这个组命名为myserver,这样在proxy_pass中只要将请求转义到myserver,这个upstream中我们就实现了在四台机器的反向代理加负载均衡。其中ip_hash指明了负载均衡是按ip地址进行分配,另外还有轮询、指定权重轮询、fail、url_hash几种调度算法。
upstream myserver; { ip_hash; server 172.16.1.1:8001; server 172.16.1.2:8002; server 172.16.1.3; server 172.16.1.4; } location / { proxy_pass http://myserver; }