知识点:
1、nginx需要linux2.6及以上内核支持(uname -a查看linux内核版本)
2、pcre包,用于nginx rewrite重写功能。
3、其实安装mysql最耗时间且最耗内存。有可能安装mysql需要30min左右。
4、一旦nginx配置上虚拟主机,一般就不能用ip来访问web服务了,而要用每个虚拟主机网站的的相应域名来访问。常用虚拟主机模式:通过linux服务器的同一个ip同一个端口,用不同的域名去访问不同的网站,而用域名访问web服务器,就又涉及到dns,或者配置本机(非web服务器)/etc/hots文件帮你解析域名。
在我的mac上:vim /etc/hosts
192.168.1.10 www.baidu.com
192.168.1.10 www.sina.com
5、--with-http_stub_status_module,编译安装nginx时的这个选项用于开启nginx自身监控,需要在nginx配置文件里配置,下面仅配置打开了www.baidu.com这个虚拟主机的自身监控,然后在浏览器里输入www.baidu.com/status
6、nginx配置文件里常用到nginx变量,我们可以配置nginx日志,比如想知道$request_filename是啥,就把nginx日志那里就配置仅打印我们想知道的变量。
7、304状态码:说明是缓存返回给用户结果。
解压编译安装pcre,供nginx安装时使用
tar xf pcre..tar.gz
cd pcre.../
./configure && make && make install
一、编译安装nginx
tar xf nginx-...tar.gz
cd nginx..../
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module && make && make install
(安装完后会在/usr/local/nginx/下自动产生4个目录:conf html logs sbin
html目录是nginx本身默认的网页文件存放路径,但生产环境,比如nginx配置php服务的虚拟主机后,用的都是php服务的web页面所在路径,比如/usr/local/php/web/index.php)
二、修改nginx配置文件,配置虚拟主机
vim /usr/local/nginx/conf/nginx.conf
http{
全局配置。。。。。
server{
listen 80;
server_name www.baidu.com
access_log logs/baidu.access.log main;
location / {
if ($request_filename ~ "index.html") { --请求文件如果匹配index.html就重定向到test.html
rewrite .* /test.html;
}
root /usr/local/php/web/baidu;
index index.html;
}
location /status {----打开nginx自身监控
stub_status on;
}
}
server{
server_name www.sina.com
access_log logs/sina.access.log main;
location / {
autoindex on; ----打开列表页显示,即如果根目录/usr/local/php/web/sina下没有index.html文件,就列出根目录的文件列表,即根目录下所有的文件名列表。一般用于测试或者用于下载页。
root /usr/local/php/web/sina;
index index.html;
}
}
}
三、启动nginx(启动nginx后会在nginx安装目录下多出几个目录,----安装nginx时只有conf、html、logs、sbin4个目录)
启动:/usr/local/nginx/sbin/nginx
重启nginx:
1、pkill nginx
2、/usr/local/nginx/sbin/nginx
重新加载服务:常用reload重加载,因为重启nginx会造成已有用户断连。
pkill -HUP nginx --给nginx传递HUP信号,把配置文件中新修改的东西加载到正在运行的nginx的进程中,但nginx进程不会关闭,保证nginx持续为用户提供服务。
四、nginx日志切割:
每天凌晨0点切割,但是当改变日志名字后,nginx不会自动生成新的baidu.access.log,那nginx服务生成的新日志就没地方打印了,又不能重启ningx服务,这时候可以用老办法,通过HUP平滑重启,也会生成新的日志文件,但是还有更好的办法,即ningx提供了一个专用来生成新日志的信号:pkill -USR1 nginx
这样消耗的系统资源也最小。
1、可以写个脚本:比如脚本里写mv日志文件到新目录,然后pkill -USR1 nginx
2、通过logrotate结合corn轮询日志(常用)
nginx日志轮询
cat /etc/logrotate.d/nginx ----nginx的logrotate配置文件
/usr/local/nginx/logs/nginx/*.log
{
daily
rotate 30
missingok
compress
notifempty
dateext ---以日期添加后缀
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
配置日志轮询计划任务
00 00 * * * root /usr/sbin/logrotate -f /etc/logrotate.d/nginx (-f指定轮询的配置文件)
五、nginx用于负载均衡+反向代理:--此时架构:浏览器---》nginx(代理层)---》后端nginx
配置nginx代理层:
cat /usr/local/nginx/conf/conf.d/upsteam.conf
upstream nginx_backend {
server 192.168.1.10:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.20:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.30:80 weight=1 max_fails=2 fail_timeout=30s;
}
cat /usr/local/nginx/conf/conf.d/baidu.http.conf
server {
listen 80;
server_name www.baidu.com;
access_log /usr/local/nginx/logs/www.baidu.com.http.log www;
error_log /usr/local/nginx/logs/www.baidu.com.error.log error;
charset utf-8;
--------------------------baidu.https.conf----------------------
listen 443;
ssl on;
server_name www.baidu.com;
access_log /usr/local/nginx/logs/www.baidu.com.https.log www;
error_log /usr/local/nginx/logs/www.baidu.com.error.log crit;
charset utf-8;
ssl_certificate /usr/local/nginx/conf/sslkey/new/inke.cn.cer;
ssl_certificate_key /usr/local/nginx/conf/sslkey/new/inke.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:-RC4+RSA:+HIGH:+MEDIUM:!EXP;
ssl_prefer_server_ciphers on;)))
--------------------------baidu.https.conf----------------------
# errors page
error_page 404 /404.html;
error_page 500 /50x.html;
# deny access hidden file like .git .svn
location = / {
deny all;
}
location /banner/index.php {
set $ip_limit_num "5";
set $ip_limit_interval "60";
access_by_lua_file lua/access_limit.lua;
return 403;
location /phpmyadmin {
return 403;
}
location / {
proxy_pass http://nginx_backend;
proxy_ignore_client_abort on;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
六、nginx rewrite
rewrite 指令末尾有4种flag标记
last:表示完成rewrite,浏览器地址栏url不变。
break:本条规则匹配完成,终止匹配,不再匹配后面的规则,浏览器地址栏url不变。
redirect:返回302临时重定向,浏览器地址栏会显示跳转后的url。
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的url。
未完待续