一文搞清让人头疼的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.confnobody 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 -vnginx version: nginx/1.14.2[alisca@spark02 nginx-1.14.2]$ sbin/nginx -Vnginx version: nginx/1.14.2built 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:显示版本信息、编译器版本、配置参数
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
Windows下安装nginx
下载安装包解压就完事了
□ 将下载的nginx压缩包解压到指定目录□ 启动方式1:双击解压目录下的nginx.exe文件即可运行nginx□ 启动方式2:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx=================================================================□ 关闭方式1:在资源管理器杀掉nginx进程(注意有两个进程)□ 关闭方式2:在dos窗口切换到nginx安装目录下执行命令:nginx -s stop
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安装主目录下的htmlindex 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主要应用场景
静态网站
修改配置文件:server {listen 80; #监听端口server_name localhost; #配置服务名#charset utf-8; #配置字符集#access_log logs/host.access.log main; #配置本虚拟主机的访问日志#默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理location / {root static_path; #配置静态网页根目录位置,默认nginx安装主目录下的htmlindex index.html index.htm; #配置首页文件的名称}}
负载均衡
访问入口只有一个,针对不同的请求分发到相应的服务器上去做处理: F5/深信服/Array等,缺点是费用昂贵,对于规模较小的网络应用成本太高: nginx/LVS/HAProxy等,有点免费开源,成本低廉实现方式:用户-->nginx负载均衡-->{Tomcat1,Tomcat2}访问动态资源文件进行配置在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.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}
动静分离
|-->{tomcat1,tomcat2}动态资源用户-->nginx负载均衡--> ||-->{nginx1,nginx2}静态资源nginx在一台Linux上安装一份,可以启动多个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配置vhost.conf_path 即可
写在最后的话
生活不会向你许诺什么,尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。所以要给自己一个梦想,之后朝着那个方向前进。如果没有梦想,生命也就毫无意义。——摩根·弗里曼
我今天才知道,我之所以漂泊就是在向你靠近。
--《廊桥遗梦》
