• Nginx安装配置


    1、安装

    1、安装编译工具及库文件

    yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
    
    2、安装PCRE库 (目的是使nginx支持具备url重写功能的rewrite模块)
    

    yum install pcre pcre-devel -y

    rpm -qa pcre pcre-devel     安装完成后检察安装结果

    3、开始安装nginx

    1)创建路径下载安装包:

    mkdir –p /zjl/software

    wget -q http://nginx.org/download/nginx-1.14.2.tar.gz

    ls  -l  nginx-1.14.2.tar.gz    查看下载后安装包信息

    2)添加一个不能登录的用户管理nginx

    groupadd nginx

    useradd -s /sbin/nologin –M –g nginx  nginx

    3)解压安装包

    tar -zxvf nginx-1.14.2.tar.gz

    4)安装

    创建安装目录:mkdir –p  /zjl/program

    cd nginx-1.14.2

    ./configure --user=nginx --group=nginx --prefix=/zjl/program/nginx-1.14.2 --with-http_stub_status_module --with-http_ssl_module

    make

    make install

    5)创建软连接

    ln -s /zjl/program/nginx-1.14.2/  /zjl/program/nginx

    6)启动前检查配置文件语法

    cd /zjl/program/nginx

    ./nginx –t

    7)启动

    /zjl/program/nginx

    8)重启
    /zjl/program/nginx –s reload

    9)查看是否启动成功

    netstat -lnt|grep 80

    ps -ef|grep nginx

    curl  127.0.0.1

    2、其他配置及问题

    1、如何查看nginx编译时的参数

    ./nginx –V

    2、访问不了nginx 欢迎页面

    服务器端:首先关闭SELinux :

    setenforce 0 #这时临时关闭selinux的方法

    永久关闭的的方法:

    编辑/etc/selinux/config 然后将SELINUX=enforcing 改为 SELINUX=disabled

    允许防火墙访问80端口:    -A INPUT -p tcp --dport 80 -j ACCEPT

    客户端:

    ping 服务器的ip

    然后telnet 10.0.0.7 80

    然后模拟用户访问,排除http服务自身的问题

    wget 10.0.0.7(curl -I 10.0.0.7)

    3、修改HTTP头信息中的connection字段,防止回显具体版本号

    vim +29 src/http/ngx_http_special_response.c

    有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把他隐藏起来

    static u_char ngx_http_error_full_tail[] = "<hr><center>" NGINX_VER "</center>" CRLF "</body>" CRLF "</html>" CRLF ;

    修改后

    static u_char ngx_http_error_tail[] = "<hr><center>LinuxprobeWeb</center>" CRLF "</body>" CRLF "</html>" CRLF

    3、nginx 配置文件说明

    1、nginx配置文件结构

    转载自:https://www.cnblogs.com/knowledgesea/p/5175711.html

    ...              #全局块
    
    events {         #events块
       ...
    }
    
    http      #http块
    {
        ...   #http全局块
        server        #server块
        {
            ...       #server全局块
            location [PATTERN]   #location块
            {
                ...
            }
            location [PATTERN]
            {
                ...
            }
        }
        server
        {
          ...
        }
        ...     #http全局块
    }

    1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

    2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

    3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

    4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

    5、location块:配置请求的路由,以及各种页面的处理情况。

    示例:

    ########### 每个指令必须有分号结束。#################
    #user administrator administrators;  #配置用户或者组,默认为nobody nobody。
    #worker_processes 2;  #允许生成的进程数,默认为1
    #pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
    error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
    events {
        accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
        multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
        #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
        worker_connections  1024;    #最大连接数,默认为512
    }
    http {
        include       mime.types;   #文件扩展名与文件类型映射表
        default_type  application/octet-stream; #默认文件类型,默认为text/plain
        #access_log off; #取消服务日志    
        log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
        access_log log/access.log myFormat;  #combined为日志格式的默认值
        sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
        sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
        keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。
    
        upstream mysvr {
          server 127.0.0.1:7878;
          server 192.168.10.121:3333 backup;  #热备
        }
        error_page 404 https://www.baidu.com; #错误页
        server {
            keepalive_requests 120; #单连接请求上限次数。
            listen       4545;   #监听端口
            server_name  127.0.0.1;   #监听地址       
            location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
               #root path;  #根目录
               #index vv.txt;  #设置默认页
               proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
               deny 127.0.0.1;  #拒绝的ip
               allow 172.18.5.54; #允许的ip           
            }
        }
    }
    View Code

    上面是nginx的基本配置,需要注意的有以下几点:

    1、1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址; 2.$remote_user :用来记录客户端用户名称; 3.$time_local : 用来记录访问时间与时区;4.$request : 用来记录请求的url与http协议;

      5.$status : 用来记录请求状态;成功是200, 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;7.$http_referer :用来记录从那个页面链接访问过来的; 8.$http_user_agent :记录客户端浏览器的相关信息;

    2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。

    3、每个指令必须有分号结束。

    2、默认配置文件:

    user  nginx nginx;  	  #管理nginx的用户组和用户		                                                                                                                                                                    
    worker_processes  1;   	#worker进程的数量
    error_log  logs/error.log;
    error_log  logs/error.log  notice;
    error_log  logs/error.log  info;
    pid        logs/nginx.pid;
    #前几行为main区,nginx的核心功能模块
    
    events {		#envent  区,nginx核心功能模块
    	worker_connections  1024;      #每个worker区块支持的最大连接数
    }
    
    
    
    http {	#http区开始,nginx核心模块
    	include       mime.types;	#nginx支持的媒体类型库文件
    	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  logs/access.log  main;                                                                                                                                                    
    
    	sendfile        on;		#开启高效传输模式
    	#tcp_nopush     on;                                                                                                                                                                
    
    	#keepalive_timeout  0;                                                                                                                                            
    	keepalive_timeout  65;	 #连接超时       
    
    	#gzip  on;                                                                                                                                                                             
    
    	server {		#server区块
    		listen       80;	#提供服务的端口,默认为80
    		server_name www.zjl.org    zjl.org;		#提供服务的域名或主机地址
    		rewrite ^/(.*) http://www.etiantian.org/$1  permanent;  #当用户访问zjl.org及下面的任意内容时,都会通过这条rewrite 跳转到#www.etiantian.org对应的地址
    		#charset koi8-r;                                                                                                                                                                   
    
    		#access_log  logs/host.access.log  main;                                                                                                                                           
    
    		location / {		#location 区块
    			root   html;		#站点根目录
    			index  index.html index.htm;	#默认首页文件
    		}
    
    		#error_page  404              /404.html;                                                                                                                                           
    
    		# redirect server error pages to the static page /50x.html                                                                                                                         
    		#                                                                                                                                                                                  
    		error_page   500 502 503 504  /50x.html; 	#对应的http状态码时,使用50x.html回应客户
    		location = /50x.html {
    			root   html;
    		}
    
    		# proxy the PHP scripts to Apache listening on 127.0.0.1:80                                                                                                                        
    		#                                                                                                                                                                                  
    		#location ~ .php$ {               #新location区块                                                                                                                                               
    		#    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;                                                                                                                                                                    
    		#}                                                                                                                                                                                 
    	}
    
    
    	# another virtual host using mix of IP-, name-, and port-based configuration                                                                                                           
    	#                                                                                                                                                                                      
    	#server {                #新server区块                                                                                                                                                             
    	#    listen       8000;                                                                                                                                                                
    	#    listen       somename:8080;                                                                                                                                                       
    	#    server_name  somename  alias  another.alias;                                                                                                                                      
    
    	#    location / {                                                                                                                                                                      
    	#        root   html;                                                                                                                                                                  
    	#        index  index.html index.htm;                                                                                                                                                  
    	#    }                                                                                                                                                                                 
    	#}                                                                                                                                                                                     
    
    
    	# HTTPS server                                                                                                                                                                         
    	#                                                                                                                                                                                      
    	#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;                                                                                                                                                  
        #    }                                                                                                                                                                                 
        #}                                                                                                                                                                                     
    }
    View Code

     

    3、nginx认证配置

    1)生成密码文件:

    yum install httpd –y      安装httpd

    htpasswd -bc /zjl/program/nginx/conf/htpasswd  zjl zjl123     生成认证文件,用户:zjl  密码:zjl123

    chmod 400 /zjl/program/nginx/conf/htpasswd     设置文件权限为:所有者可读取

    chown nginx   /zjl/program/nginx/conf/htpasswd     设置文件所有者为用户: nginx

    2)nginx配置文件

    配置内容为:

    auth_basic            "密码提示";                        # 设置用于认证的提示字符串
    auth_basic_user_file  /zjl/program/nginx/conf/htpasswd;  # 设置认证的密码文件
    

    可配置的位置有:http、server、location、limit_except

     

    4、配置nginx  gzip 压缩实现性能优化

    纯文本压缩比很高,因此,纯文本的内容最好进行压缩,如html , js , css , xml , shtml等格式的文件

    被压缩的纯文本要大于1kb由于压缩算法原因如果极小的文件压缩后可能更大

    图片、视频(流媒体)文件尽量不压缩,因为,这些文件本来大多就已经压缩过,再压缩减小的很少,二来压缩时会消耗大量的cpu、内存资源。

    gzip  on;		#开启gzip功能
    
    gzip_min_length   1k; 	#设置允许压缩的最小字节数
    
    gzi_buffers   4  32k;		#压缩缓冲区的大小,表示申请4个单位为16k的压缩结果流缓存
    
    gzip_http_version   1.1;	#压缩版本用于设置http协议版本,默认是1.1,使用默认即可
    
    gzip_comp_level   9;	#压缩比率,1压缩比最小,处理速度最快,9 压缩比最大,传输速度最快也最消耗cpu资源
    
    gzip_types   text/css   text/xml  application/javascript;#用来指定压缩的类型,“text/html”类型总会被压缩; 请查看安装目录下的mime.types文件。
    
    gzip_vary  on; #vary  header支持,该选项可以让前端 的缓存服务器缓存经过gzip压缩的页面,例如 用squid 缓存经过nginx压缩的数据
    

    5、配置nginx expires 缓存实现性能优化

    该功能就是为用户访问网站内容设定一个过期时间,当用户第一次访问网站内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及以后继续访问时,浏览器检查已经缓存的本地内容,就不会去服务器下载了,直到缓存内容过期或被清除为止。

    expires 可以放在server 里也可以放在location里

    expires 30s; //表示把数据缓存30秒

    expires 30m;//表示把数据缓存30分

    expires 10h;//表示把数据缓存10小时

    expires 30d; #设置过期时间为30天

    expires 3y; #设置过期时间为3年

    6、限制ip段访问

    location / {
    
        deny 192.168.1.1;
    
        allow 192.168.1.0/24;
    
        allow 10.1.1.0/16;
    
        deny all;
    
    }
    

    7、referer 防盗链

    转载自:https://www.jb51.net/article/107338.htm

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

    location ~* .(gif|jpg|png|webp)$ {
       valid_referers none blocked domain.com *.domain.com server_names ~.google. ~.baidu.;
       if ($invalid_referer) {
          return 403;
          #rewrite ^/ http://www.domain.com/403.jpg;
       }
       root /opt/www/image;
    }

    以上所有来至domain.com和域名以及baidu和google的站点都可以访问到当前站点的图片,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,如果使用下面的rewrite,那么盗链的图片都会显示403.jpg。none规则实现了允许空referer访问,即当直接在浏览器打开图片,referer为空时,图片仍能正常显示.

    8、rewrite指令语法

    rewrite regex replacement [flag];

    如:rewrite ^/(.*)s http://www.zhangjialou.org/$1 permanent;

    上述指令中,regex 部分是正则表达 式,配置成功后跳转到 http://www.zhangjialou.org/$1 。这里的$1 是取前面正则表达式括号里的内容,结尾permanent;是永久301 重定向标记,

    server {                          # 添加个server区块做跳转
        listen     80;
        server_name  brian.com;
        rewrite ^/(.*) http://www.brian.com/$1 permanent;
    }
    server {
        listen       80;
        server_name  www.brian.com;
        location / {
            root   html/brian;
            index  index.html index.htm;
        }
        access_log logs/brian.log main gzip buffer=128k flush=5s;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  • 相关阅读:
    linux常用命令总结
    python3使用465端口发送邮件来解决阿里云封闭25端口问题
    Bamboo Django Celery定时任务和时间设置
    优秀的web端 vue框架
    将HTML5 Canvas的内容保存为图片借助toDataURL实现
    .naturalWidth 和naturalHeight属性,
    HTML5之FileReader的使用
    详解 Array.prototype.slice.call(arguments)
    在页面关闭或者刷新的时候触发 onbeforeunload
    缓存图片
  • 原文地址:https://www.cnblogs.com/happydreamzjl/p/10918248.html
Copyright © 2020-2023  润新知