Nginx安装配置 1、安装 2、其他配置及问题 3、nginx 配置文件说明

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;
    }
}