0.jdk安装配置php
#下载相应的jdk软件包,而后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz
mkdir -p /usr/java/
mv jdk1.7.0_25/ /usr/java/ #而后配置环境变量,这样能够任何地方引用jdk,以下配置: #vi /etc/profile 最后面加入如下语句: export JAVA_HOME=/usr/java/jdk1.7.0_25 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin #source /etc/profile #使环境变量立刻生效 #java --version #查看java版本,看到jdk1.7.0_25版本即表明java jdk安装成功。
1.官网css
http://nginx.org/html
2.nginx安装java
2.1cd /user/local/software目录下(没有的话,就建立)linux
2.2上传nginx包及高可用包到该目录下nginx
nginx-1.6.2.tar.gz
keepalived-1.2.18.tar.gz
2.3解压至 /usr/local下c++
tar -zxf nginx-1.6.2.tar.gz /usr/local
2.4下载锁须要的依赖库文件:web
yum install pcre yum install pcre-devel yum install zlib yum install zlib-devel
2.5进行configure配置:正则表达式
cd nginx-1.6.2 && ./configure --prefix=/usr/local/nginx
下图表明成功apache
查看是否报错:
报错1:error: C compiler cc is not found
解决方案:
安装gcc-c++包
命令:yum -y install gcc-c++
-y:全部的询问均选择yes
2.6编译安装(cd 到 /usr/local/nginx-1.6.2目录下)
make && make install
2.7启动nginx
cd /usr/local/nginx目录下: 看到以下4个目录
....conf 配置文件
... html 网页文件
...logs 日志文件
...sbin 主要二进制程序
启动命令:(/usr/local/nginx/sbin/nginx -s start)
/usr/local/nginx/sbin/nginx
查看是否启动成功:(netstat -ano | grep 80)或者以下:
ps -ef|grep nginx
关闭命令:(/usr/local/nginx/sbin/nginx -s stop)
/usr/local/nginx/sbin/nginx -s stop
重启命令:(/usr/local/nginx/sbin/nginx -s reload)
/usr/local/nginx/sbin/nginx -s reload
浏览器访问地址:(看到欢迎页面便可)
如果失败:可能为80端口被占用等。
lsof -i:80查看进程pid,而后kill -9 pid便可
3.nginx虚拟主机配置(即配置nginx.conf文件)
3.1假设将nginx.conf中的80端口改成8081
cd 到/etc/sysconfig/下,找到iptables文件,添加以下一行,端口放行记录
#user nobody; #开启进程数 <=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; #每一个进程最大链接数(最大链接=链接数x进程数)每一个worker容许同时产生多少个连接,默认1024 events { 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"'; #请求日志保存位置(这里是全局的配置,适用于全部server) #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不会再把请求发往已检查出标记为不可用的服务器 #} #webapp #upstream myapp { # server 192.168.1.171:8080 weight=1 max_fails=2 fail_timeout=30s; # server 192.168.1.172:8080 weight=1 max_fails=2 fail_timeout=30s; #} #配置虚拟主机,基于域名、ip和端口 server { #监听端口 listen 80; #监听域名 server_name localhost; #charset koi8-r; #nginx访问日志放在logs/host.access.log下,而且使用main格式(还能够自定义格式) #access_log logs/host.access.log main; #返回的相应文件地址 location / { #设置客户端真实ip地址 #proxy_set_header X-real-ip $remote_addr; #负载均衡反向代理 #proxy_pass http://myapp; #返回根路径地址(相对路径:相对于/usr/local/nginx/) root html; #默认访问文件 index index.html index.htm; } #配置反向代理tomcat服务器:拦截.jsp结尾的请求转向到tomcat #location ~ \.jsp$ { # proxy_pass http://192.168.1.171:8080;#此处是tomcat所在服务器的ip:端口 #} #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; #} } #虚拟主机配置: server { listen 1234; server_name bhz.com; location / { #正则表达式匹配uri方式:在/usr/local/nginx/bhz.com下 创建一个test123.html 而后使用正则匹配 #location ~ test { ## 重写语法:if return (条件 = ~ ~*) #if ($remote_addr = 192.168.1.200) { # return 401; #} #if ($http_user_agent ~* firefox) { # rewrite ^.*$ /firefox.html; # break; #} root bhz.com; index index.html; } #location /goods { # rewrite "goods-(\d{1,5})\.html" /goods-ctrl.html; # root bhz.com; # index index.html; #} #配置访问日志(这里是局部的配置,适用于该server) access_log logs/bhz.com.access.log main; } # 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 / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
3.3location拦截说明:
3.3.1将指定IP加入黑名单,告知其鉴权失败(注意空格!!!!!!!!!!!!!)
192.168.0.103访问时,以下结果
3.3.2 拦截user_agent含有firefox的请求
3.3.3实现动静分离
3.3.3.1若是是请求的是某个url,静态网页,则走其中一个location
3.3.3.2若是是访问的是另外一个url,动态网页,如jsp,php,则能够经过反向代理,转发给apache或者tomcat,走另外一个location
基础语法:
location = {}#精准匹配
location {}#通常匹配
location ~{}#正则匹配
1 location [=|~|~*|^~] /uri/ { … } 2 符号 含义 3 = 开头表示精确匹配 4 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径便可。nginx不对url作编码,所以请求为/static/20%/aa,能够被规则^~ /static/ /aa匹配到(注意是空格) 5 ~ 开头表示区分大小写的正则匹配 6 ~* 开头表示不区分大小写的正则匹配 7 !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则 8 / 通用匹配,任何请求都会匹配到。 9 多个location配置的状况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,没必要拘泥,仅供参考): 10 首先匹配 = 11 其次匹配 ^~ 12 其次是按文件中顺序的正则匹配 13 最后是交给 / 通用匹配 14 当有匹配成功时候,中止匹配,按当前匹配规则处理请求 15 例子,有以下匹配规则: 16 location = / { 17 #规则A 18 } 19 location = /login { 20 #规则B 21 } 22 location ^~ /static/ { 23 #规则C 24 } 25 location ~ \.(gif|jpg|png|js|css)$ { 26 #规则D 27 } 28 location ~* \.png$ { 29 #规则E 30 } 31 location !~ \.xhtml$ { 32 #规则F 33 } 34 location !~* \.xhtml$ { 35 #规则G 36 } 37 location / { 38 #规则H 39 } 40 那么产生的效果以下: 41 访问根目录/, 好比http://localhost/ 将匹配规则A 42 访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H 43 访问 http://localhost/static/a.html 将匹配规则C 44 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,可是规则D顺序优先,规则E不起做用,而 http://localhost/static/c.png 则优先匹配到规则C 45 访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,由于规则E不区分大小写。 46 访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,由于不区分大小写。规则F,规则G属于排除法,符合匹配规则可是不会匹配到,因此想一想看实际应用中哪里会用到。 47 访问 http://localhost/category/id/1111 则最终匹配到规则H,由于以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,好比FastCGI(php),tomcat(jsp),nginx做为方向代理服务器存在。 48 因此实际使用中,我的以为至少有三个匹配规则定义,以下: 49 #直接匹配网站根,经过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。 50 #这里是直接转发给后端应用服务器了,也能够是一个静态首页 51 # 第一个必选规则 52 location = / { 53 proxy_pass http://tomcat:8080/index 54 } 55 # 第二个必选规则是处理静态文件请求,这是nginx做为http服务器的强项 56 # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 57 location ^~ /static/ { 58 root /webroot/static/; 59 } 60 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { 61 root /webroot/res/; 62 } 63 #第三个规则就是通用规则,用来转发动态请求到后端应用服务器 64 #非静态文件请求就默认是动态请求,本身根据实际把握 65 #毕竟目前的一些框架的流行,带.php,.jsp后缀的状况不多了 66 location / { 67 proxy_pass http://tomcat:8080/ 68 } 69 ReWrite语法 70 71 last – 基本上都用这个Flag 72 break – 停止Rewirte,不在继续匹配 73 redirect – 返回临时重定向的HTTP状态302 74 permanent – 返回永久重定向的HTTP状态301 75 1、下面是能够用来判断的表达式: 76 -f和!-f用来判断是否存在文件 77 -d和!-d用来判断是否存在目录 78 -e和!-e用来判断是否存在文件或目录 79 -x和!-x用来判断文件是否可执行 80 2、下面是能够用做判断的全局变量 81 例:http://localhost:88/test1/test2/test.php 82 $host:localhost 83 $server_port:88 84 $request_uri:http://localhost:88/test1/test2/test.php 85 $document_uri:/test1/test2/test.php 86 $document_root:D:\nginx/html 87 $request_filename:D:\nginx/html/test1/test2/test.php 88 Redirect语法 89 90 server { 91 listen 80; 92 server_name start.igrow.cn; 93 index index.html index.php; 94 root html; 95 if ($http_host !~ “^star\.igrow\.cn$" { 96 rewrite ^(.*) http://star.igrow.cn$1 redirect; 97 } 98 } 99 防盗链 100 101 location ~* \.(gif|jpg|swf)$ { 102 valid_referers none blocked start.igrow.cn sta.igrow.cn; 103 if ($invalid_referer) { 104 rewrite ^/ http://$host/logo.png; 105 } 106 } 107 根据文件类型设置过时时间 108 109 location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { 110 if (-f $request_filename) { 111 expires 1h; 112 break; 113 } 114 } 115 禁止访问某个目录 116 117 location ~* \.(txt|doc)${ 118 root /data/www/wwwroot/linuxtone/test; 119 deny all; 120 }
4.关键模块配置
4.1静态页面拦截规则 location(在server里)
4.2反向代理 proxy_pass(在location里)
4.3负载均衡 upstream(在server外)