nginx安装与应用
一.nginx的安装与启动:
1.安装依赖库。nginx的一些模块需要依赖其他第三方库,通常有pcre库(perl compatible regular expression,perl兼容正则表达式,支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)
yum install -y pcre pcre-devel zlib zlib-devel open openssl-devel
2.安装patch
如果想主动检测后端服务器状态的话,需要用yaoweibin开发的nginx_upstream_check_module。从 https://github.com/yaoweibin/nginx_upstream_check_module 下载zip包。注意,是下载
2.生成Makefile文件。将下载好的nginx-xxx.tar.gz上传到centos7中,解压,进到nginx-xxx目录中,运行./configure,结束后会打印 nginx path prefix 路径等信息
在执行./configure命令时可以添加一些常用的选项,如
--prefix=<path> 指定nginx安装目录,默认为/usr/local/nginx目录
--with-http_ssl_module 声明启用HTTP的ssl模块,这样nginx服务器就可以支持HTTPS请求了
--with-http_stub_status_module 声明启用Server Status页面,默认不启用。启用后,只需在location块中配置一个uri(如下文中的/nginx_status),访问此uri页面就可以看到一些服务器状态信息,如下
Active connections: 1
server accepts handled requests
10 10 120
Reading: 0 Writing: 1 Waiting: 0
--add-module=<path> 指定第三方模块的路径,多个第三方模块的话就用多个--add-module指定各自的路径。如--add-module=/home/koushengrui/app/lua-nginx-module-0.10.13 --add-module=/home/koushengrui/app/ngx_devel_kit-0.3.1rc1 --add-module=/home/koushengrui/app/nginx_upstream_check_module-master,指定编译时添加nginx-lua-module、ngx_devel_kit和nginx_upstream_check_module(下文中的 check interval=3000 rise=2 fall=5 timeout=1000 type=tcp; 就是依赖此模块而配置的)。
3.编译与安装。# make && make install。(因为涉及往/usr/local目录中写入,所以必须是root用户或者具有root权限的用户)
4.启动与关闭。切换到/usr/local/nginx目录,此目录下有conf目录、html目录、logs目录、sbin目录,其中conf目录有默认的配置文件,logs目录有日志文件(包括访问日志文件和错误日志文件),sbin目录有可执行命令
切换到sbin目录,用默认配置文件启动nginx:./nginx;指定配置文件启动nginx:./nginx -c path/nginx.conf,其中path是绝对路径,因为有时候用相对路径不能正确解析。
nginx启动后,就会在logs目录中(路径可以在nginx.conf文件中配置,默认是logs目录)生成一个nginx.pid的文件,记录master process的pid。
启动后,就可以用nginx -s signal来控制nginx了,其中signal的值可以是stop、quit、reload:
stop,fast shutdown 快速关闭
quit,graceful shutdown 平滑关闭。关闭nginx后,logs目录中的nginx.pid文件会消失,下次启动后再次生成
reload,reloading the configuration file 根据之前启动时的配置文件平滑重启
如果想在重启的时候另外指定配置文件呢???
二.配置文件的location块解释
location的语法结构为:location [=|~|~*|^~] uri
其中uri是待匹配的字符串,分为两种,标准uri和正则uri。[ ]中的是可选项。
nginx首先在server的多个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。然后,再按顺序搜索是否有正则uri和请求字符串匹配,如果有,则结束搜索,用此location块处理此请求。如果没有,则使用刚才记录的匹配度最高的location块处理请求。如果刚才标准uri匹配时所有的location块都不匹配,则此时会访问html目录下的index.html文件。
location = uri {
xxx
} =后面跟标准uri,要求请求字符串与uri严格匹配。如果匹配成功,就用当前location块处理请求,而不会继续搜索了。
location uri {
xxx
} 普通匹配,标准uri
location ~ uri {
xxx
} ~后面跟正则uri,匹配时区分大小写
location ~* uri {
xxx
} ~*后面跟正则uri,匹配时不区分大小写
location ^~ uri {
xxx
} ^~后面跟标准uri,匹配以uri开头的请求。如果匹配的话,直接用此location块处理请求,不再去搜索正则uri
示例:
修改默认的nginx.conf配置文件server块如下:
server{
listen 80;
server_name aliecs1; location /index {
root first;
index index.html;
}
#严格匹配
location = /index {
root /second;
index index.html;
} location ^~ /index1 {
root third;
index index.html;
}
}
root可以指定相对路径,也可以是绝对路径。相对路径是相对nginx的根路径(/usr/local/nginx/),写法是前面不加/。绝对路径以/开始。请求地址被某个location匹配并处理后,最终访问路径是root指定的路径+请求字符串去掉ip和端口的剩余部分。
如果请求地址是192.168.153.128/index.html,则会用location /index {}处理,最终访问/usr/local/nginx/first/index.html。
如果请求地址是192.168.153.128/index1.html,则会用location ^~ /index1 {}处理,最终访问/usr/local/nginx/third/index1.html。
如果请求地址是192.168.153.128/index2.html,还是会用location /index {}处理,最终访问/usr/local/nginx/first/index2.html。
如果请求地址是192.168.153.128/index,则会用location = /index {}处理,最终访问/second/index。
三.rewrite功能,字面意思是重写,实际上就是重定向redirect
主要有if指令、break指令、return指令、rewrite指令、set指令:
if指令:可以在server块、location块中配置,使用if做条件判断时需要注意两点:if与后面括号一定要有空格;判断等于是用=,而不再是==;表达式中的字符串不用加引号。示例:
server {
listen ;
server_name 192.168.153.136;
location / {
if ($http_user_agent ~ Trident) {
root /home/koushengrui/html;
}
}
}
以上配置表示如果发起请求的浏览器是IE或Edge浏览器的话,则首页会是/home/koushengrui/html下的index.html文件,否则是/usr/local/nginx/html下的index.html文件。
注意,没有else指令,没有else指令,在if块中不能使用index指令。
return指令:用于直接向客户端返回响应状态码及重定向地址。return指令可以在server块、location块、if块中使用,用法为:return code url。配置示例:
server {
listen ;
server_name 192.168.153.136; location / {
return http://192.168.153.136:10000/image/example.png;
root /home/koushengrui/html;
index welcome.htm;
}
}
如果请求地址是http://192.168.153.136/*** 的话,则此请求会被重定向至http://192.168.153.136:10000/image/example.png。
301是永久移动,302是临时移动。
rewrite指令:通过正则表达式的使用来改变URI。这里需要大量的正则表达式的知识,现在了解的还不透彻。包括域名跳转、防盗链的功能都是用rewrite指令来做的。
四.反向代理与负载均衡
什么是反向代理?
负载均衡
内置策略有3种,轮询、加权轮询、IP hash:
1.轮询,顾名思义,就是服务器将每个前端请求按顺序(时间顺序或者排列次序)逐一分配到不同的后端节点上,对于出现问题的后端节点自动去除;
2.加权轮询,在基本的轮询策略基础上考虑各后端节点接受请求的权重,指定各后端节点被轮询到的几率,主要用于后端节点性能不均的情况下;
3.IP hash,是将前端的访问IP进行hash操作,然后根据hash结果将请求分配给不同的后端节点。这样会使得每个前端访问IP会固定访问一个后端节点,好处是前端用户的session只在一个后端节点上,不必考虑一个session存在多台节点上而出现的session共享问题。
扩展策略有2种,url hash、fair:
4.url hash,将前端请求的url地址进行hash操作,根据hash结果将请求分配到不同的后端节点上;
5.fair,将前端请求转发到负载最小的后端节点上。Nginx通过后端节点对请求的响应时间来判断负载情况,响应时间最短的节点负载就相对较轻,Nginx就会将前端请求转发到此后端节点上。
五.gzib模块
gzib on;#默认情况下是off,要想启动gzip功能,得设置为on
gzip_min_length 1024;#当文件的长度大于1024字节时才压缩,否则不压缩,避免越压越大
gzip_buffers 32 4k;#或者gzip_buffers 16 8k;设置gzip压缩文件使用缓存空间的大小,第一个数是nginx服务器向系统申请缓存空间的个数,第二个数是每个缓存空间的大小
gzip_comp_level 6;#设置gzip的压缩程度,级别从1到9,1表示压缩程度最低,效率最高,9表示压缩程度最高,效率最低
gzip_types text/plain application/javascript text/css text/xml;#根据相应文件的MIME类型选择性地开启gzip压缩功能,text/plain对应txt文件,application/javascript(或者text/javascript)对应js文件,text/css对应css文件,text/xml对应xml文件。这其中没有写html文件对应的MIME类型,是因为只要开启了gzip功能,html文件、htm文件是默认压缩的,写的话会报错。通常来说,只建议html/htm、css、js、xml文件进行压缩,而图片、音视频文件不建议压缩,因为压缩效果很小。
六.expires缓存优化
一般对图片进行expires配置
location ~* ^.+\.(png|jpg|jpeg|gif|ico|bmp|psd)$ {yyyy-MM-dd HH:mm:ss
expires 1d;#y表示年,M表示月,d表示天,h表示小时,m表示分钟,s表示秒
}
七.限速
location /download {
if ($http_user_agent ~ Chrome){
limit_rate_after 100M;
}
limit_rate 200k;
root /home/koushengrui;
}
limit_rate_after表示多少大小之后才开始限速,上例从100M开始限速,也就是说一个文件下载时前100M是不限速的,100M之后才限速
limit_rate表示限速多少,上例中限速200k/s
八.跨域
需添加如下配置:(参考链接 https://enable-cors.org/server_nginx.html,实测有效)
#
# Wide-open CORS config for nginx
#
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
}
zeb系统生产上某一台nginx服务器(有很多台)配置如下:
user wls81 wls;
worker_processes 5; error_log /wls/apache/applogs/error.log;
pid /wls/apache/applogs/nginx.pid; events {
use epoll;
worker_connections 200000;
} http {
# include mime.types;
default_type application/octet-stream;
server_tokens off; # 不返回nginx版本号 sendfile on;
keepalive_timeout 65; log_format access '$remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" $http_x_forwarded_for'; upstream ng_zeb {
ip_hash;
server 192.168.56.100:8080;
server 192.168.56.101:8080;
server 192.168.56.102:8080;
keepalive 32;
check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
} server {
listen 0.0.0.0:31023;
listen 0.0.0.0:31024 ssl;
ssl_certificate /wls/apache/ssl/xxx.crt;
ssl_certificate_key /wls/apache/ssl/xxx.key; access_log /wls/apache/applogs/host.access.log access;
rewrite ^/f5monweb(.*) /monitor_ng/$1; location / {
proxy_set_header Host $http_host;
proxy_set_header Origin $http_origin;
proxy_pass http://ng_zeb;
index index.html;
} location /monitor_ng {
root /wls/apache;
index f5check.htm f5check.jsp;
} location /nginx_status {
stub_status on;
access_log off;
allow 192.168.56.1;
deny all;
}
}
}
nginx安装与应用的更多相关文章
- zabbix 3.0.3 (nginx)安装过程中的问题排错记录
特殊注明:安装zabbix 2.4.8和2.4.6遇到2个问题,如下:找了很多解决办法,实在无解,只能换版本,尝试换(2.2.2正常 | 3.0.3正常)都正常,最后决定换3.0.3 1.Error ...
- Nginx 安装以及反向代理配置(windows)
安装 windows 下 Nginx 安装非常简单,下载地址 http://nginx.org/en/download.html. 选择红框这个,下载下来是个 zip 文件,解压.这时我们双击根目录的 ...
- nginx安装与配置
一.在线安装 ubuntu 安装 sudo apt-get install nginx 安装后文件结构为: 配置文件:/etc/nginx ,并且每台虚拟主机已经安排在 /etc/nginx/site ...
- Windows下将nginx安装为服务运行
今天看到nginx这个小服务器软件正式版更新到了1.4.2,想玩下它.这个服务器软件虽小,但功能强大,是开源软件,有着良好的性能,被很多个人.企业,甚至大型企业所使用! 由于是在Windows下,所以 ...
- windows下nginx安装、配置与使用(转载)
目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...
- 阿里云服务器Linux CentOS安装配置(八)nginx安装、配置、域名绑定
阿里云服务器Linux CentOS安装配置(八)nginx安装.配置.域名绑定 1.安装nginx yum -y install nginx 2.启动nginx service nginx star ...
- Linux系统下Nginx安装详解
该随笔为个人原创,后期会根据项目实践实时更新,如若转载,请注明出处,方便大家获得最新博文! 注:安装Nginx需要Linux系统已经安装 openssl-fips-2.0.2.tar.gz zli ...
- Linux下查看Nginx安装目录、版本号信息?
Linux环境下,怎么确定Nginx是以那个config文件启动的? 输入命令行: ps -ef | grep nginx 摁回车,将出现如下图片: master process 后面的就是 ngi ...
- nginx安装及负载均衡配置
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二 ...
- nginx安装方式
1.首先安装pcre库 获取pcre到一个目录 wget http://ftp.exim.llorien.org/pcre/pcre-8.21.tar.gz 解压缩pcre包 tar -zxvf pc ...
随机推荐
- Git 的版本库创建和修改
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- group by 和count 联合使用问题
工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来统计的数量和想要的数量不正确. count统计的数量是被group by 分组以后每一组中数据的数量 ...
- linux安装bind with DLZ <NIOT>
2015年6月11日 1.sudo wget ftp://ftp.isc.org/isc/bind9/9.10.1/bind-9.10.1.tar.gz 或者 使用“rz”命令 2.tar -zxv ...
- 寒假学干货之------ 初学者关于fragment_main(碎片的困扰)
我们在activity_main中编写的框架,会被fragment_main中的取代掉,是因为新版的ADT为了配合平板Android3.0开发 起作用的代码在MainActivity.java中 pa ...
- pythonRedis 订阅功能实现
两天机器做,host要写订阅主机的ip,客户端发消息,服务端订阅消息 cat redis_connector.py #!/usr/bin/env python__author__ = 'Q.Li'im ...
- The Skyline Problem leetcode 详解
class Solution { public: vector<pair<int, int>> getSkyline(vector<vector<int>&g ...
- redis10--主从模式
redis的主从模式(1)介绍redis存储数据是在内存中运行的,运行速度比关系型数据库要快一些.而且它具有SortSet/Hash等具有特色的数据类型,这是其它数据库无法比拟的.redis有增删改查 ...
- 关于用PS改变图像颜色
由于写的一个页面主色调变了,里面的一些图标颜色也要相应改变,自己难得重新去psd里面截图,就想着用ps,看能否直接能变换一下图标颜色.其实方法也很简单的. 1:用ps打开需要改变图标颜色的文件,然后选 ...
- git中添加多个SSH公钥,以及不同系统之间的差别
git学习已经也有一段时间了,基本的操作,口令会了一点点,但是还没有git团队开发的实践,这个有待加强~ git是在windows下面模拟Linux环境的,linux自带的ssh服务,可以通过该服务远 ...
- POJ 3740 Easy Finding
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...