一文搞清让人头疼的Nginx,值得收藏!

Posted VC世家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞清让人头疼的Nginx,值得收藏!相关的知识,希望对你有一定的参考价值。

nginx安装

一文搞清让人头疼的Nginx,值得收藏!
版本:nginx-1.14.2

▼    ▼    ▼   ▼  ▼    

好久没更新文章了,项目得事情太多,总得给自己的懒惰找个借口,哈哈~

话不多说进入正题

Linux前置准备

检查是否安装相关库:gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel执行命令:yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
正式安装Nginx
□ 解压下载下来的Nginx安装包,执行命令:tar -zxvf nginx-1.14.2.tar.gz□ 进入到解压后的目录,执行命令:cd nginx-1.14.2□ 在nginx主目录下执行命令:./configure --prefix=/usr/local/nginx  其中--prefix为指定nginx安装的位置□ 执行命令进行编译:make□ 执行命令进行安装:make install

启动Nginx

进入到nginx安装目录,执行命令: [alisca@spark02 nginx-1.14.2]$ sbin/nginx -c conf/nginx.conf 有两个进程,一个master,一个worker ----------------------------------------------------------------------------------------------------- root 23849 1 0 00:02 ? 00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf nobody 23850 23849 0 00:02 ? 00:00:00 nginx: worker process -----------------------------------------------------------------------------------------------------注意:以非root用户启动会出错:nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)     原因是非root用户不能使用1024以下的端口,改用root用户启动解决     执行命令: [alisca@spark02 nginx-1.14.2]$ sudo sbin/nginx -c conf/nginx.conf

停止Nginx

执行命令: [alisca@spark02 nginx-1.14.2]$ sudo sbin/nginx -s stop 或者jps找到nginx的进程号pid,执行命令: [alisca@spark02 nginx-1.14.2]$ kill -9 pid(nginx进程号,有两个,master、worker) 或者 [alisca@spark02 nginx-1.14.2]$ kill -QUIT pid(nginx主进程号) #优雅关闭,处理完请求后关闭 或者    [alisca@spark02 nginx-1.14.2]$ kill -TERM pid(nginx主进程号)  #强制关闭,直接关闭,同kill -9 命令

重启Nginx

执行命令: [alisca@spark02 nginx-1.14.2]$ sudo sbin/nginx -s reload

配置检查

进入到nginx安装目录,执行命令: [alisca@spark02 nginx-1.14.2]$ sbin/nginx -c conf/nginx.conf -t #-t: 对配置文件进行语法检查 test的意思,有错误会提示错误行号

其他参数

进入到nginx安装目录,执行命令: [alisca@spark02 nginx-1.14.2]$ sbin/nginx -v    nginx version: nginx/1.14.2 [alisca@spark02 nginx-1.14.2]$ sbin/nginx -V nginx version: nginx/1.14.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)  configure arguments: --prefix=/home/alisca/cluster/nginx-1.14.2
#-v:显示版本信息 -V:显示版本信息、编译器版本、配置参数

▼    ▼    ▼   ▼  ▼    

一文搞清让人头疼的Nginx,值得收藏!

Windows下安装nginx

下载安装包解压就完事了
□ 将下载的nginx压缩包解压到指定目录□ 启动方式1:双击解压目录下的nginx.exe文件即可运行nginx□ 启动方式2:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx=================================================================□ 关闭方式1:在资源管理器杀掉nginx进程(注意有两个进程)□ 关闭方式2:在dos窗口切换到nginx安装目录下执行命令:nginx -s stop
一文搞清让人头疼的Nginx,值得收藏!

nignx配置文件中文解析

#总体上分成三个部分构成:基本配置、events配置、HTTP配置,以下为配置详情 #------------------------基本配置------------------------- #user nobody; #配置worker进程运行用户 worker_processes 1; #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
#error_log logs/error.log; #配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error #error_log logs/error.log notice; #error_log logs/error.log info;
#pid logs/nginx.pid; #配置进程pid文件 #------------------------events配置------------------------- #配置工作模式和连接数 events { worker_connections 1024; #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections }
#------------------------HTTP配置------------------------- #配置HTTP服务器,利用它的反向代理功能提供负载均衡支持 http { #------------------------HTTP基本配置------------------------- include mime.types; #配置nginx支持哪些多媒体类型,可以在conf/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日志及存放路径,并使用上面定义的main日志格式 #access_log logs/access.log main;
sendfile on; #开启高效文件传输模式 #tcp_nopush on; #防止网络阻塞
#keepalive_timeout 0; keepalive_timeout 65; #长连接超时时间,单位:毫秒
#gzip on; #开启gzip压缩输出 #------------------------HTTP_多server配置------------------------- server { listen 80; #监听端口 server_name localhost; #配置服务名
#charset utf-8; #配置字符集
#access_log logs/host.access.log main; #配置本虚拟主机的访问日志
#默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理 location / { root html; #root是配置服务器默认网站根目录位置,默认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; 配置50x错误页面 location = /50x.html { root 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; #} }

# another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias;
# location / { # root html; # index index.html index.htm; # } #}

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

nginx主要应用场景

一文搞清让人头疼的Nginx,值得收藏!
一文搞清让人头疼的Nginx,值得收藏!

静态网站

修改配置文件: server { listen 80; #监听端口 server_name localhost; #配置服务名
#charset utf-8; #配置字符集
#access_log logs/host.access.log main; #配置本虚拟主机的访问日志
#默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理 location / { root static_path; #配置静态网页根目录位置,默认nginx安装主目录下的html index index.html index.htm; #配置首页文件的名称 } }
一文搞清让人头疼的Nginx,值得收藏!

负载均衡

访问入口只有一个,针对不同的请求分发到相应的服务器上去做处理 硬件负载均衡:eg: F5/深信服/Array等,缺点是费用昂贵,对于规模较小的网络应用成本太高 软件负载均衡:eg: nginx/LVS/HAProxy等,有点免费开源,成本低廉实现方式: 用户-->nginx负载均衡-->{Tomcat1,Tomcat2}访问动态资源
(1)通过在nginx的nginx.conf 文件进行配置 在http模块上添加: upstream www.myweb.com { server 127.0.0.1:9100 weight=3; server 127.0.0.1:9200 weight=1; } #其中weight表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越大 #upstream是配置nginx于后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器 (2)在server模块里添加 location /myweb { proxy_pass http://www.myweb.com } #其中www.myweb.com字符串要和upstream后面的字符串相等 (3)负载均衡策略: 轮询(默认):在server后不添加weight参数 在http模块上添加: upstream www.myweb.com { server 127.0.0.1:9100; server 127.0.0.1:9200; }
权重:在server后添加weight参数,访问几率和weight比接近 在http模块上添加: upstream www.myweb.com { server 127.0.0.1:9100 weight=3; server 127.0.0.1:9200 weight=1; }
ip_hash:也叫IP绑定,每个请求访问IP的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失问题 在http模块上添加: upstream www.myweb.com { ip_hash; server 127.0.0.1:9100 weight=3; server 127.0.0.1:9200 weight=1; }
最少连接:web请求会被转发到最少连接数的服务器上 upstream www.myweb.com { least_conn; server 127.0.0.1:9100 weight=3; server 127.0.0.1:9200 weight=1; }
(4)负载均衡其他配置 upstream www.myweb.com { server 127.0.0.1:9100; server 127.0.0.1:9200 backup; #其他所有的非backup机器down的时候,才请求backup机器 }
upstream www.myweb.com { server 127.0.0.1:9100; server 127.0.0.1:9200 down; #down表示当前的server是down状态,不参与负载均衡 }
一文搞清让人头疼的Nginx,值得收藏!

静态代理

通过在nginx的nginx.conf文件进行配置方式一:匹配文件 #当访问静态资源,则从Linux服务器/opt/static目录下获取(举例) location ~ .*.(js|css|html|gif|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { root /opt/static; } #其中:~表示正则匹配,也就是说后面的内容可以是正则表达式匹配 # 第一个点.表示任意字符 # *表示一个或多个字符 # 是转义字符,是后面点的转义字符标志 # |表示或者 # $表示结尾 #整个配置表示以.后面括号里面的这些为后缀结尾的文件都有nginx处理; #注意:放置静态资源的目录,需要有足够的权限,权限不足会报403错误,建议:chmod 755
方式二:匹配目录 location ~ .*/(css|js|img|images) { root /opt/static }
一文搞清让人头疼的Nginx,值得收藏!

动静分离

                        |-->{tomcat1,tomcat2}动态资源用户-->nginx负载均衡-->  | |-->{nginx1,nginx2}静态资源nginx在一台Linux上安装一份,可以启动多个nginx,每个nginx的配置文件不一样即可分类别(动态资源,静态资源)多配置
一文搞清让人头疼的Nginx,值得收藏!

虚拟主机

虚拟主机就是把一台服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站 nginx提供虚拟主机的功能,就是为了让我们不需要安装多个nginx,就可以运行多个网站 nginx下,一个server标签就是一个虚拟主机 nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要配置多个虚拟主机,配置多个server节点即可 配置虚拟主机通常有一下两种方式: (1)基于域名的虚拟主机 server{ listen 80; server_name www.wang.com; location /wang { proxy_pass http://www.wang.com; #还应该配置名称为www.wang.com的负载均衡 } }
server{ listen 80; server_name www.bin.com; location /bin { proxy_pass http://www.bin.com; #还应该配置名称为www.bin.com的负载均衡 } }
(2)通过include的方式引入虚拟主机配置 include /usr/local/nginx/vhost/vhost.conf; 将虚拟目录的配置文件加入到“http{}”部分的末尾,与其他server并列; 其中vhost.conf中的内容同基于域名的虚拟主机的server配置 在nginx.conf中的http末尾include vhost.conf_path 即可
克服懒惰的最好办法就是现在行动~
希望今天的小知识能够帮到你, 欢迎转发留言加关注哦,一起学习,共同进步~


写在最后的话

生活不会向你许诺什么,尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。所以要给自己一个梦想,之后朝着那个方向前进。如果没有梦想,生命也就毫无意义。——摩根·弗里曼


我今天才知道,我之所以漂泊就是在向你靠近。

--《廊桥遗梦》


以上是关于一文搞清让人头疼的Nginx,值得收藏!的主要内容,如果未能解决你的问题,请参考以下文章

10 个让人头疼的 bug

10 个让人头疼的 bug

一文搞定关系数据库设计要领,值得收藏!

前端是个让人头疼的东西

用CSS解决一个让人头疼的需求

面试中让人头疼的分布式事务问题