nginx安装
打开nginx.org查看最近稳定版,以下链接查看最新nginx的yum repo:
http://nginx.org/en/linux_packages.html#stable
编辑/etc/yum.repo.d/nginx.repo填入以下内容:
1 2 3 4 5
| [nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1
|
Replace “OS” with “rhel” or “centos”, depending on the distribution used, and “OSRELEASE” with “6” or “7”, for 6.x or 7.x versions, respectively.
然后使用yum list |grep nginx
查看输出中是否含有nginx.x86_64
如果有说明nginx repo安装成功。
安装nginx
yum -y install nginx
##概述
nginx -v
查看nginx版本
rpm -ql nginx
查看nginx目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| /etc/logrotate.d/nginx #nginx日志轮转,用于logratate服务的日志切割 /etc/nginx #nginx主配置文件 /etc/nginx/conf.d #nginx主配置文件 /etc/nginx/conf.d/default.conf #nginx默认配置文件 /etc/nginx/fastcgi_params #cgi配置相关 /etc/nginx/koi-utf #编码转换文件,映射转换文件 /etc/nginx/koi-win #编码转换文件,映射转换文件 /etc/nginx/mime.types #设置http协议的Content-Type与扩展名对应关系(nginx处理无法识别的扩展名时读取该文件) /etc/nginx/modules #nginx模块目录 /etc/nginx/nginx.conf #nginx主配置文件 /etc/nginx/scgi_params #cgi配置相关 /etc/nginx/uwsgi_params #cgi配置相关 /etc/nginx/win-utf #编码转换文件,映射转换文件 /etc/sysconfig/nginx # 配置系统守护进程管理器管理方式 /etc/sysconfig/nginx-debug # 配置系统守护进程管理器管理方式 /usr/lib/systemd/system/nginx-debug.service # 配置系统守护进程管理器管理方式 /usr/lib/systemd/system/nginx.service # 配置系统守护进程管理器管理方式 /usr/lib64/nginx /usr/lib64/nginx/modules #nginx模块目录 /usr/libexec/initscripts/legacy-actions/nginx /usr/libexec/initscripts/legacy-actions/nginx/check-reload /usr/libexec/initscripts/legacy-actions/nginx/upgrade /usr/sbin/nginx #nginx命令 /usr/sbin/nginx-debug #nginx命令 /usr/share/doc/nginx-1.12.2 #帮助和手册 /usr/share/doc/nginx-1.12.2/COPYRIGHT #帮助和手册 /usr/share/man/man8/nginx.8.gz #帮助和手册 /usr/share/nginx /usr/share/nginx/html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html /var/cache/nginx #nginx缓存目录 /var/log/nginx #nginx日志
|
nginx -V
查看nginx详细的编译参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| *#安装目录或路径* --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock
*#执行对应模块时,nginx所保留的临时文件* --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp
*#nginx启动的用户和用户组* --user=nginx --group=nginx
*#nginx模块* --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module
*#设置额外的参数将被添加到CFLAGS变量* --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'
*#设置附加的参数,链接系统库* --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
|
nginx.conf
/etc/nginx/nginx.conf
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 /var/log/nginx/access.log main;#日志路径和格式
nginx变量
nginx请求变量
arg_PARAMETER、http_HRADER、sent_http_HEADER
比如$http_user_agent
nginx内置变量
http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
自定义变量
待添加
nginx模块
nginx官方模块和第三方模块
proxy_pass模块
语法:proxy_pass http://xxxx/yyy
正向代理:代理client
反向代理:代理server
负载均衡
通过proxy_pass
转发到upstream server
组
upstream模块必须配置在server层以外
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| upstream name{ server 1.1.1.1:8881; server x.nbma.info; server 2.2.2.2 weight=5; #权重,需要设置加权轮询
server 3.3.3.3 backup; #备份节点
server 4.4.4.4 down; #不提供服务
server 5.5.5.5 max_fails=3; #允许请求失败的次数
server 6.6.6.6 fail_timeout=30; #重试时间
server 7.7.7.7 max_conn=500; #最大连接数 }
server { location /{ proxy_pass http://name; } }
|
调度算法
1 2 3 4 5 6 7
| upstream name{ ip_hash; #基于源IP hash least_conn; #最小连接 hash $request_uri; #基于变量uri进行hash server 1.1.1.1:8881; server x.nbma.info; }
|
rewrite规则
语法: rewrite regex replacement [flag];
位置:只能在server,location或者if内
例如
1
| rewrite ^(.*)$ /pages/maintain.html break;
|
flag类型:
last: 停止rewrite检测,继续匹配rewrite之后的其他规则,服务器只收到一次请求
break: 停止rewrite检测,不在匹配rewrite之后的其他规则,直接去root目录
redirect: 返回302临时重定向,地址栏会显示跳转后的地址,服务器收到两次请求
permanent: 返回301永久重定向,地址栏会显示跳转后的地址,服务器收到两次请求,客户端会缓存这次跳转结果,之后跳转将由浏览器完成,无需经过服务器处理
常见的rewrite规则:
SEO优化
1 2 3 4
| rewrite ^/course-(\d+)-(\d+)-(\d+)-\.html$ /course/$1/$2/$3.html break;
http://example.com/course-11-22-33.html http://example.com/course/11/22/3.html
|
基于agent判断
1 2 3
| if ($http_user_agent ~* Chrome) { rewrite ^/nginx http://example.com/xxx break; }
|
文件路径不存在,类似404
1 2 3
| if (!-f $request_filename) { rewrite ^(.*)$ http://example.com/xxx redirect; }
|
原文作者:
Mansur
原文链接:
http://nbma.info/learn-nginx/
许可协议: 除特别声明外,本站文章均采用CC BY-NC 4.0许可协议,转载请注明出处。