Nginx安装配置
1、安装
1、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel2、安装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 reload9)查看是否启动成功
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块:配置请求的路由,以及各种页面的处理情况。
示例:
View Code########### 每个指令必须有分号结束。################# #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 } } }上面是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、默认配置文件:
View Codeuser 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; # } #} }
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; } }