我爱编程

Nginx入门学习

2018-04-05  本文已影响0人  原来不语

nginx的优点:

nginx是一款自由、开源的、高性能HTTP服务器和反向代理服务器;是一个IMAP、POP3、SMTP代理服务器;
比apache占用更少的内存及资源。抗并发,nginx处理请求是异步非阻塞的,提供反向代理,负载均衡,支持rewrite,而且稳定性也比较高。

安装

先安装pcre(nginx用来支持rewrite的支持库)
https://ftp.pcre.org/pub/pcre/
tar -xzvf pcre-X(下载的版本)
cd pcre-XX
./configure
make && make install
安装nginx wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -xzvf nginx-XX
cd nginx-XX
./configure --prefix = /soft/nginx
//指定nginx的安装目录。默认/usr/local/nginx
make && make install

启动关闭nginx

检查配置文件是否正确
/usr/local/nginx/sbin/nginx -t
./sbin/nginx -V可以查看到编译选项

启动  、关闭
  ./sbin/nginx #默认配置文件 conf/nginx.conf -c 指定
  ./sbin/nginx -s stop
  pkill nginx
重启(建议reload而不是重启)
  ./sbin/nginx -s reload
  sudo service nginx
  或者kill -HUP cat /usr/loacl/nginxs/logs/nginx.pid

nginx的配置文件

切换到
/usr/local/nginx/sbin/nginx
vim conf/nginx.conf
#user nobody    使用指定用户
#worker_process 2; #使用的worker进程数,master不在此列,同cpu内核数
#worker_cpu_affinity 0001 0010  #如果 worker_processes为2以上要设置
如果上边设置的为4  则下边为 0001 0010 0100 1000
#error_log logs/e.log    #错误日志文件默认在logs里
#error_log logs/e.log notice ;日志文件与日志级别[debug | info | notice | warn | error | crit |alert | emerg]
#pid logs/nginx.pid #存放进程pid
events{
    use epoll [kqueue|epoll|select|poll] #处理连接方法
    #epoll 是多路复用IO(I/O Multiplexing)中的一种
    #仅用于linux2.6内核以上,可以大大提高nginx的性能
    #worker_connections 1024;     每个worker最大连接数,默认为1024
}
http{
    #log_format main  
    # access_log访问日志
  
    server{
         listen 80; 监听80端口
        (listen  81; 这样还会监听81端口)
         server_name  www.nginx.cn #监听域名 定义服务器的默认网站根目录位置
         access_log logs/nginx.access.log main  #设定本虚拟访问主机的访问日志,采用main格式
         client_max_body_size 10m ;#最大报文,默认1M
         location {
              root html;
               #定义首页索引文件的名称
               index index.php index.html index.html;
          }
         #定义错误提示页面
           error_page 500 502 503 504 /50.html
          location = /50x.html{
                root html;
            }
      }
}
1.如果只有一个server、server_name 可以任意起(可以为IP/域名/任何字符串)则不论用什么访问(IP/域名/字符串),无论server_name是否匹配,都匹配到此server
2、如果有多个server,如果server_name可以匹配到任一个server的server_name,则使用此server,否则匹配到第一个server块,不论server_name是否匹配!

Nginx配置虚拟主机

  server{
       listen 80;
       access_log  logs/xxx.log    [(日志格式)]为每个网站设定独立的日志记录
       server_name   xxx.com   
  }
  location / {
        root /  html/xxxxx(根目录,可以相对目录可以绝对目录)
         index index.php  index.html;首页
  }
 location  {
      虚拟主机对PHP的解析
   }

location 基本语法

location 基本语法 [=|~|~*|]/uri/{.....}
=严格匹配
~为区分大小写匹配
~*为不区分大小写匹配
.......
location = /{
#A只配/询。
}
location/{
#B匹配任何查询,因为所有请求都已/开头。但是则表达式规则和长的块规则配被优先利用和匹配
location  ^~/images/ {
#C 配任何以/images/ 开头的任何查询并且停搜索,
 location~*.(gif l jpg l jpeg)$ {
 #D 匹配任何以gif、jpg jpeg结尾请求
 #但是所有images/ 目录的请求将由ConfigurationC处理

URL重写 用 rewrite(两种重写方法)

image.png
nginx支持简单的if语句,
if ( !-e $request_filename){
      rewrite (.*)$ /index.php/$1
}
将地址栏上所有的东西,都捕捉到然后重写到index.php

将 /auth/login
 http://index.php ?/auth/login
server{
       listen 80;
       access_log  logs/xxx.log    [(日志格式)]为每个网站设定独立的日志记录
       server_name   xxx.com   
  }
  location / {
        root /  html/xxxxx(根目录,可以相对目录可以绝对目录)
        index index.php  index.html;首页
        try_files $uri/index.php?uri;
  }

反向代理

用nginx做反向代理用proxy_pass,nginx反向代理不用自己处理图片的相关请求,
而是把图片的请求转发给apache来处理。
image.png
配置如下 (响应图片请求  )
upstream name_hosts{
      server 192.168.123.1:80  #此处是是一个IP:port格式要转到的ip
}
location ~ \.(jpg | jpeg | png | gif)${
    proxy_set_header Host www.new.com; #要转 到的域名
    proxy_pass  HTTP://IP:port; #要转到的ip
}
image.png
 但是经过代理服务器转发后,真实的服务器就获取不到用户的真实ip,
 所以在使用代理服务器时,需要代理服务器将用户的真实IP转发到真实的服务器上
location ~ \.(jpg | jpeg | png | gif)${
    proxy_pass  HTTP://IP:port;
    proxy_set_header X-Forwarded-For $remote_addr;#$remote_addr用户的真实IP
}

nginx的集群和负载均衡

upstream {}模块 把多台服务器加入到一个组然后 memcache_pass, fastcg_pass, proxy_pass ==>upstream组
#例如这个放置图片的服务器
 配置upstream
 upstream imageserver{
      server  IP:port  weight=1 max_fails=2 fail_timeout=30s;
      server  IP:port  weight=1 max_fails=2 fail_timeout=30s;
    }
 下游调用
   location ~ \.(jpg | jpeg | png | gif){
         proxy_set_header X-Forwarded-For $remote_addr;
          proxy_pass http://imageserver;
    }
  
  默认的负载均衡的算法:
  设置计数器,轮流请求N台服务器
  可以安装第三方模块,来利用不同参数吧请求均衡到不同的服务器上
   如基于cookie值区别用户做负载均衡(nginx sticky)模块
   基于URL利用一致性哈希算法做均衡(nginxHttpUpstreamConsistentHash模块)
   基于IP做负载均衡等。
负载均衡的算法要好好设计,如果设计不当可能会丢掉用户的session!!!!

nginx的日志文件

image.png

个性化日志输出重写log_format newrule,然后将access_log后的main替换为newrule

上一篇下一篇

猜你喜欢

热点阅读