【转载-学习】[一个前端必会的 Nginx免费教程 - 技术胖]

本文学习资料:https://www.jspang.com/detailed?id=39
Nginx官网:https://www.nginx.com/

Nginx:轻量级HTTP服务器:

采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。

文中使用的是Centos7

yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim

mkdir zy7y

cd zy7y

mkdir app backup download logs work

安装Nginx

  1. 查看源:yum list | grep nginx

  2. 新建源:vim /etc/yum.repos.d/nginx.repo, 加入下方代码

    [nginx]
    name=nginx repo
    baseurl=baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    
  3. 安装nginx:yum install nginx

  4. 查看nginx的安装位置:rpm -ql nginx

  5. nginx.conf文件详解:cd /etc/nginx/ cat nginx.conf

    #运行用户,默认即是nginx,可以不进行设置
    user  nginx;
    #Nginx进程,一般设置为和CPU核数一样
    worker_processes  1;   
    #错误日志存放目录
    error_log  /var/log/nginx/error.log warn;
    #进程pid存放位置
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024; # 单个后台进程的最大并发数
    }
    
    
    http {
        include       /etc/nginx/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"';
    
        access_log  /var/log/nginx/access.log  main;   #nginx访问日志存放位置
    
        sendfile        on;   #开启高效传输模式
        #tcp_nopush     on;    #减少网络报文段的数量
    
        keepalive_timeout  65;  #保持连接的时间,也叫超时时间
    
        #gzip  on;  #开启gzip压缩
    
        include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件
    
  6. default.conf配置详解: cat /etc/nginx/conf.d/default.conf

    server {
        listen       80;   #配置监听端口
        server_name  localhost;  //配置域名
    
        #charset koi8-r;     
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /usr/share/nginx/html;     #服务默认启动目录
            index  index.html index.htm;    #默认访问文件
        }
    
        #error_page  404              /404.html;   # 配置404页面
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;   #错误状态码的显示页面,配置后需要重启
        location = /50x.html {
            root   /usr/share/nginx/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;
        #}
    }
    
  7. 输入nginx 启动nginx服务(systemctl start nginx.service 也可以)哦

  8. 停止nginx服务nginx -s quit (systemctl stop nginx.service)

  9. 查看服务运行状态:ps aux | grep nginx
    
  10. 修改配置文件后需要重载配置文件:nginx -s reload

  11. 自定义错误页和访问设置修改配置文件/etc/nginx/conf.d

    # 单独为每个错误码设置不同的页面
    # 在conf配置文件中添加
    error_page 404	/404_error.html
    # 在/usr/share/nginx/html目录下新建对于的html文件
    
    # 将错误码设置成外部链接
    error_page 404 http://www.baidu.com
    
    # 简单访问设置,控制一些ip访问
        location / {
            root   /usr/share/nginx/html;     #服务默认启动目录
            index  index.html index.htm;    #默认访问文件
            
            # 允许某个ip访问: allow 需要在deny之前不然会被deny all;覆盖
            allow 45.76.202.231;
            
            # 禁止某个ip访问; 整个配置文件 只能有一个 deny
            deny 112.74.164.224;
            
            # 禁止某个网段不能访问(1~255都不准访问)
            deny 112.74.164.1/255;
            
            # 不允许所有IP访问
            deny all;   
        }
    
  12. Nginx访问控制权限匹配: 在location / {...}后添加

        # img目录所有ip都能访问
        location =/img{
            allow all;
        }
        # admin/目录所有ip都不能访问
        location =/admin{
            deny all;
        }
        # php结尾的不允许访问
        location ~\.php${
        		deny all;
        }
    
  13. Nginx设置虚拟主机/etc/nginx/conf.d/default.conf

    虚拟主机是指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一个虚拟主机,每台虚拟主机都可以对外提供Web服务,并且互不干扰。在外界看来,虚拟主机就是一台独立的服务器主机,这意味着用户能够利用虚拟主机把多个不同域名的网站部署在同一台服务器上,而不必再为简历一个网站单独购买一台服务器,既解决了维护服务器技术的难题,同时又极大地节省了服务器硬件成本和相关的维护费用。

    # 基于端口的虚拟主机
    1. `/etc/nginx/conf.d/`新建8001.conf
    server{
            listen 8001;
            server_name localhost;
            root /usr/share/nginx/html/html8001;
            index index.html;
    }
    # 基于IP的虚拟主机
    只需要将server_name localhost 中的 localhost 修改成对应的IP
    
  14. Nginx反向代理的设置

    正向代理:客户端需要访问没有权限访问的真实服务器资源。但是代理服务器有该权限,而且客户端有访问代理服务器的权限,这时客户端通过访问代理服务器,代理服务器再访问真实服务器,把内容返回给客户端上面

    graph LR A[客户端A] -->|访问代理服务器|proxy[代理服务器] B[客户端B] -->|访问代理服务器|proxy[代理服务器] C[客户端C] -->|访问代理服务器|proxy[代理服务器] proxy[代理服务器]-->|访问真实服务器| server[服务器]

    反向代理:

    反向代理跟代理正好相反(需要说明的是,现在基本所有的大型网站的页面都是用了反向代理),客户端发送的请求,想要访问server服务器上的内容。发送的内容被发送到代理服务器上,这个代理服务器再把请求发送到自己设置好的内部服务器上,而用户真实想获得的内容就在这些设置好的服务器上。

    graph LR A[客户端A] -->|访问代理服务器|proxy[代理服务器] proxy[代理服务器]-->|访问真实服务器| server1[服务器1] proxy[代理服务器]-->|访问真实服务器| server2[服务器2] proxy[代理服务器]-->|访问真实服务器| server3[服务器3]

    反向代理的用途和好处

    • 安全性:正向代理的客户端能够在隐藏自身信息的同时访问任意网站,这个给网络安全代理了极大的威胁。因此,我们必须把服务器保护起来,使用反向代理客户端用户只能通过外来网来访问代理服务器,并且用户并不知道自己访问的真实服务器是那一台,可以很好的提供安全保护。
    • 功能性:反向代理的主要用途是为多个服务器提供负债均衡、缓存等功能。负载均衡就是一个网站的内容被部署在若干服务器上,可以把这些机子看成一个集群,那Nginx可以将接收到的客户端请求“均匀地”分配到这个集群中所有的服务器上,从而实现服务器压力的平均分配,也叫负载均衡。
  15. 简单的反向代理

    # 修改配置文件`/etc/nginx/conf.d/default.conf`
    # 在 server_name ...下面一行添加
    server{
            listen 80;
            server_name localhost;
            location / {
            			# 将server_name代理到其他网点
                   proxy_pass http://www.xxx.com;
            }
    }
    
  16. Nginx适配PC或移动设备(需要两套代码,原理通过userAgent调用PC/APP代码显示给用户)

    1. 在/usr/share/nginx/目录下新建两个文件夹,分别为:pc和mobile目录
          cd /usr/share/nginx
          mkdir pc
          mkdir mobile
    2. 在pc和miblic目录下,新建两个index.html文件,文件里下面内容
    			<h1>I am pc!</h1>
    			<h1>I am mobile!</h1>
    3. 进入etc/nginx/conf.d目录下,修改8001.conf文件,改为下面的形式:
          server{
               listen 80;
               server_name nginx2.jspang.com;
               location / {
                root /usr/share/nginx/pc;
                # $http_user_agent,可以获取到请求客户端的userAgent
                if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
                   root /usr/share/nginx/mobile;
                }
                index index.html;
               }
          }
    
  17. Nginx的Gzip压缩配置

    Gzip是网页的一种网页压缩技术,经过gzip压缩后,页面大小可以变为原来的30%甚至更小。更小的网页会让用户浏览的体验更好,速度更快。gzip网页压缩的实现需要浏览器和服务器的支持。

    gzip指令:

    • gzip : 该指令用于开启或 关闭gzip模块。
    • gzip_buffers : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
    • gzip_comp_level : gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。
    • gzip_disable : 可以通过该指令对一些特定的User-Agent不使用压缩功能。
    • gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取。
    • gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0.
    • gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容gzip压缩。
    • gzip_vary : 用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩。
    编辑文件/etc/nginx/nginx.conf,在http{default_tyue...;后添加
    		# 是否启用gizp模块
    		gzip on;
        gzip_types text/plain application/javascript text/css;
    }
    

这里只是先做个记录,方便以后用到的时候有的查,感谢技术胖

猜你喜欢

转载自www.cnblogs.com/zy7y/p/13375014.html