Nginx 入门了解

2018-08-19  本文已影响0人  小张同学_loveZY

Nginx

nginx[engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP / UDP代理服务器,最初由Igor Sysoev编写。

结构组成

nginx是基于进程的并发服务器,由一个master进程,和多个的workerc进程,master进程负责转发外部请求,worker负责负责处理具体的请求。

反向代理

反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。这里代理服务器是一个连接内部网络的入口,就如门面模式中的接口一样。内部网络可以有多种组织方式。

正向代理

工作原理就像一个跳板,用户客户端把请发发送给网络时,先经过代理服务器,由代理服务器包装用户请求向互联网目的主机发送用户的请求,并把结果返回。比如:我访问不了google.com,但是我能访问一个代理服务器A,A能访问google.com。于是我先连上代理服务器A,告诉他我需要google.com的内容,A就去取回来,然后返回给我。

Nginx优点:
  1. 反向代理保护了真实的web服务器,web服务器对外不可见,外网只能看到反向代理服务器,而反向代理服务器上并没有真实数据,但其实该功能可以使用网关实现,因此你也可以理解反向代理服务器自带网关属性。

  2. 节约了有限的IP地址资源,企业可以通过不同的服务器对外提供服务,而不需要为每个服务器提供IP地址,因此可以统一外部的访问,而在内部通过反向代理实现不同的服务提供。

  3. 减少WEB服务器压力,提高响应速度,反向代理可以利用缓存和负载均衡技术,降低web服务器的压力,从而更快的响应外部的访问。

    • 缓存
      反向代理服务器缓存下经常被外部访问的数据,从而直接对外提供信息,而降低对于服务器访问的压力。
    • 负载均衡
      首先要求有多几台的服务器,反向代理服务器通过算法合理分配对于内容的访问,比避免由此导致服务器拥堵。
Nginx常用命令
service nginx start    // 启动nginx服务
systemctl nginx start  // centos 7 下启动nginx服务

nginx -s stop   // fast shutdown
nginx -s quit   // graceful shutdown
nginx -s reload //reloading the configuration file
nginx -s reopen //reopening the log files

ps -ax | grep nginx // 查看nginx进程
kill -s QUIT ID    // 杀死master进程

nginx -h            // 查看帮助

Nginx配置文件

1. 配置文件全局一览
main # 全局设置
events { # Nginx工作模式
    ....
}
http { # http设置
    ....
    upstream myproject { # 负载均衡服务器设置
        .....
    }
    server  { # 主机设置
        ....
        location { # URL匹配
            ....
        }
    }
    server  {
        ....
        location {
            ....
        }
    }
    ....
}
2. main模块
# 指定用户和用户组
user zhangjue zhangjue;
# worker子进程数,不含master,一般和CPU核心数相同
worker_processes 2;
# 错误日志,日志输出级别有debug、info、notice、warn、error、crit可供选择。
error_log /usr/local/var/log/nginx/error.log notice;
# 指定进程id的存储文件位置
pid /usr/local/var/run/nginx/nginx.pid;
# 一个nginx进程可以打开的最多文件描述符数目,最大值为65535
worker_rlimit_nofile 1024;
3. events模块
events {
    # 工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll,具体自查
    use epoll; #linux平台
    # 用于定义Nginx每个进程的最大连接数
    worker_connections  1024;
}
4. http模块
# 负责HTTP服务器相关属性的配置
http {
     # 通过include导入mime类型文件,来告诉nginx来识别文件类型
    include mime.types;
    # 缺省的MIME格式(Content type)
    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"';
    # 日志存放的地址,使用main格式
    access_log /usr/local/var/log/nginx/access.log  main;
    
    # 客户端连接保持活动的超时时间 10s
    keepalive_timeout 10;
    # 缓存设置
    upstream myproject {
        .....
    }
    # 服务器设置,多个
    server {
        ....
    }
}
5. server模块
server {
    
    # 监听端口
    listen 8080;
    
    # 用来指定IP地址或者域名,多个域名之间用空格分开
    server_name localhost 192.168.12.10 www.yangyi.com;
    
    # 全局定义,指定根目录。
    root   /Users/yangyi/www;
    # 全局定义访问的默认首页地址
    index  index.php index.html index.htm; 
    # 访问日志和格式
    access_log  usr/local/var/log/host.access.log  main;
    # 错误日志和级别
    error_log  usr/local/var/log/host.error.log  error;
    
    # location 后面对应访问路由,/代表根目录
    location / {
    
        # 访问的文件真实所在地
        root   /Users/yangyi/www;
        # 访问主页
        index  index.php index.html index.htm;
    }
    
    # 配置laravel框架的nginx时需要加以下配置定位
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # 正则匹配带有php结尾的访问php服务器
    location ~ \.php$ {
        #laravel 需要的配置,
        fastcgi_split_path_info ^(.+\.php)(/.+)$; 
        # 端口
        fastcgi_pass   php:9000;
        # 根页面
        fastcgi_index  index.php;
        #根目录所在文件夹
        fastcgi_param  SCRIPT_FILENAME  /var/php-fpm/www/php_lqActivity/public/$fastcgi_script_name;
        include        fastcgi_params;
    }       
}

因为每一个service都比较长,建议用include命令包含配置文件,而把配置文件另起一个文本编辑。正式因为location指定了一个服务器对于不同

6. upstream模块
#定义一个负载名字
upstream zhangjue{
    ip_hash;  # 使用的算法
    # 定义了四个可访问的主机地址
    server 192.168.12.1:80;
    server 192.168.12.2:80  down;
    server 192.168.12.3:8080  max_fails=3  fail_timeout=20s;
    server 192.168.12.4:8080;
}

负载均衡算法有:

其他的还有页面缓存等一些配置,由于我目前还没有使用过,应该会在之后进行补充,或者读者也可以自己查询相关资料。

官网资料连接:官网Document

推荐博客:Nginx请求反向代理

上一篇 下一篇

猜你喜欢

热点阅读