Nginx
一、日志配置
日志 access.log, error.log
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
日志格式定义:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志切割:
使用 -s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件,这个功能使得日志文件不至于过大:
/usr/local/nginx/sbin/nginx -s reopen
Linux下我们可以直接把日志文件mv走,但是当你mv移走后新的日志文件没有重新生成,一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,原进程还是读写原来的文件,而此时我们只需要执行一下 reopen,则会生成新的日志文件;
操作步骤:
- mv原文件到新文件夹中,此时 nginx还写这个旧日志文件(写入新位置的旧日志文件中了);
- 调用nginx -s reopen用来打开新日志文件,这样nginx会把新日志信息写入这个新的日志文件中;
这样完成了日志的切割工作, 同时切割过程中没有日志的丢失;
为了更高效地完成此工作,可以采用定时任务+脚本实现:
#!/bin/sh
date=`date +%Y%m%d%`
logpath1=/usr/local/nginx/logs/
logpath2=/opt/logs/nginx/
mv $logpath1/access.log $logpath2/access-$date.log
mv $logpath1/error.log $logpath2/error-$date.log
/usr/local/nginx/sbin/nginx -s reopen
配置定时任务:crontab
*/1 * * * * /usr/local/nginx/logCron.sh
二、动静分离
Nginx主要用于部署静态资源,比如部署静态网站,如果我们是一个动态网站,比如Java开发的动态网站,那么动态网站里面肯定有一些静态资源,像图片、css、html、js、视频、音频、文档等等,这些静态资源如果使用tomcat部署,效率并不高,而采用nginx部署则大大提高性能;
动静分离是实际应用中常见的一种场景;
- 动态资源,如jsp由tomcat或其他web服务器完成;
- 静态资源,如图片、css、js等由nginx服务器完成;
动静分离充分发挥它们各自的优势,从而达到更高效合理的架构;
1、 静态资源在Nginx中如何配置:
方式一:
通过在nginx.conf配置文件中添加静态资源的location,比如:
#当访问静态资源,则从linux服务器/opt/static目录下获取
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt
|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
Localtion匹配的最终效果:
abd.js | asfkjasd.css | shdkufhskjdfhks.jpg
其中:
- ~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配;
- 第一个点 . 表示任意字符;
-
- 表示一个或多个字符;
- . 是转移字符,是后面这个点的转移字符;
- | 表示或者
- $ 表示结尾
- 整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理;
方式二:
通过在nginx.conf配置文件中配置静态资源所在目录实现,比如:
location ~ .*/(css|js|img|image) {
root /opt/static;
}
Localtion匹配的最终效果: saefsw/css | safiuhasiufhsa/js | sdufhsdfjksd/img
http://www.web.com/css/index.css
http://www.web.com/static/protal/order/css/index.css
放置静态资源的目录,要注意一下目录权限问题,如果权限不足,可能会出现403错误,给目录赋予权限 chmod 744;
三、Nginx配置https
文档:http://nginx.org/en/docs/http/configuring_https_servers.html
HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层,HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443,现在大部分网站都实现了https;
Nginx 配置 HTTPS 并不复杂,主要有两个步骤:
(1)签署可信任的SSL证书;
(2)在Nginx中配置HTTPS;
1、什么是 SSL 证书
SSL证书是一种数字证书,它使用Secure Socket Layer协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:
1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听;
2、用户可以通过服务器证书验证他所访问的网站是否真实可靠;
SSL 证书主要有两个功能:加密和身份证明,证书需要购买,比如:https://www.wosign.com;
我们做实验就是自己签发一个证书,在企业里面到时候买一个证书即可,整个配置步骤都是完全一样的;’
2、自行颁发不受浏览器信任的SSL证书
通过openssl来生成,如果linux中没有安装openssl,需要安装一下,执行:
yum install openssl openssl-devel -y
- 1、#生成一个RSA密钥 (私钥)
openssl genrsa -out mynginx.key 2048
- 2、#生成一个证书请求
openssl req -new -key mynginx.key -out mynginx.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=power Inc./OU=Web Security/CN=web.com"
- 3、#自己签发证书
openssl x509 -req -days 365 -in mynginx.csr -signkey mynginx.key -out mynginx.crt
字段解读
- C字段:Country,单位所在国家,为两位数的国家缩写,如:CN 表示中国;
- ST 字段:State/Province,单位所在州或省;
- L 字段:Locality,单位所在城市/或县区;
- O 字段:Organization,此网站的单位名称;
- OU 字段:Organization Unit,下属部门名称,也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
- CN 字段:Common Name,网站的域名;
3、在Nginx中配置HTTPS;
添加Nginx的ssl支持的模块:(最终是要重新编译出一个新的nginx可执行程序)
如果之前安装时没有加入ssl模块,则需要到解压的nginx目录下执行;
./configure --with-http_ssl_module
当执行上面语句,出现./configure: error: SSL modules require the OpenSSL library.
则需要安装 yum -y install openssl openssl-devel
依赖错误解决后再执行./configure --with-http_ssl_module
然后make
(得到一个nginx可执行程序),不要make install否则会覆盖掉之前的nginx;
把原来nginx备份(如果不需要原来的也可以不备份)
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
把新编译出来的nginx覆盖旧的;
cp objs/nginx /usr/local/nginx/sbin/nginx
配置https
配置https
# HTTPS server
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/mynginx.crt;
ssl_certificate_key /usr/local/nginx/mynginx.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;
}
}
配置参数解读
- ssl_session_cache shared:SSL:1m;
所有工作进程之间共享缓存,缓存大小以字节为单位指定,一兆字节可以存储大约4000个session,每个共享缓存都应该有一个任意名称,具有相同名称的缓存可以用于多个虚拟服务器,Nginx官方提示使用shared,性能会更高 - ssl_session_timeout 5m;
指定客户端可以重用会话参数的时间; - ssl_ciphers HIGH:!aNULL:!MD5;
指定启用的密码,密码以OpenSSL库可以理解的格式指定; - ssl_prefer_server_ciphers on
设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件;‘’
访问
第一次访问,由于是我们自己生成的证书,浏览器不信任会弹出红色警告,点继续访问就行了;