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 ...
随机推荐
- C#代码篇:代码产生一个csv文件调用有两个核心的坑
忙活了半天终于可以开工了,a物品到底要不要放进去取决于两个因素,第一是a有4kg重,只有背包大于等于4kg的时候才能装进去(也就是说当i=1,k<4时f[i,k]=0):第二是当背包的重量大于等 ...
- bootstrap页面模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Hibernate 注解说明
转:http://blog.csdn.net/u012312373/article/details/46566081 1.类级别注解 @Entity 映射实体类 @Table 映 ...
- javaMail邮件发送的简单实现
package com.test.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.Ses ...
- drupal7 boost模块为登录用户提供缓存
这段时间研究Drupal7的缓存相关,看了好多资料,都提到了boost和authcache两个模块,今天来说一下boost. 具体的下载安装,配置等,官网写的听清楚,boost模块地址 ,安装配置方法 ...
- SQL 查询优化 索引优化
sql语句优化 性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂的 ...
- Python 修炼3
# 列表 功能方法 *补充(zip zip(list1,list2) 会形成一个[(),()]新的列表list1和list2一一对应得组成一个新的元素以元组最为单位) # 1.修改# li = [1, ...
- My97DatePicker -- 一个功能丰富, 而且兼容 ie 6, 7的日期选择组件
easyUI 也提供了 功能强大的日期组件, 可惜在ie 6,7,8下会报错,没有找到 addEventListener , JSON, 可能现在不想再支持低版本ie了 另外avalon也提供了 日 ...
- ACE Socket Wrapper Facade
ACE Socket Wrapper Facade 1:Socket API 1.1 IPC(进程间通信) IPC分为本地IPC(同一计算机上的不同进程)和远程IPC(网络互联的不同计算机),本地IP ...
- 重读The C programming Lanuage 笔记四:c预处理
C预处理器执行宏替换.条件编译以及包含指定的文件.以#开头的命令行就是与处理器的对象.这些命令行的语法独立于语言的其他部分,它们可以出现在任何地方,其作用可延续到所在编译单元的末尾(与作用域无关).行 ...