nginx | nginx 安装及常用配置详解
Nginx(“engine x”)是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能的 Web 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx 是 Apache 服务器不错的替代品。
Nginx 安装
系统平台:CentOS release 6.6 (Final) 64 位。
一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、首先要安装 PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能。
1、下载 PCRE 安装包,下载地址:http://downloads.sourceforge….
[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2、解压安装包:
[root@bogon src]# tar zxvf pcre-8.35.tar.gz
3、进入安装包目录
[root@bogon src]# cd pcre-8.35
4、编译安装
[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install
5、查看 pcre 版本
[root@bogon pcre-8.35]# pcre-config --version
安装 Nginx
1、下载 Nginx,下载地址:http://nginx.org/download/ngi…
[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
2、解压安装包
[root@bogon src]# tar zxvf nginx-1.6.2.tar.gz
3、进入安装包目录
[root@bogon src]# cd nginx-1.6.2
4、编译安装
[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install
5、查看 nginx 版本
[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v
到此,nginx 安装完成。
Nginx 配置
创建 Nginx 运行使用的用户 www:
[root@bogon conf]# /usr/sbin/groupadd www
[root@bogon conf]# /usr/sbin/useradd -g www www
配置 nginx.conf,将 /usr/local/webserver/nginx/conf/nginx.conf 替换为以下内容
[root@bogon conf]# cat /usr/local/webserver/nginx/conf/nginx.conf
user www www;
worker_processes 2; #设置值和 CPU 核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include 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';
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
#下面是 server 虚拟主机的配置
server
{
listen 80;# 监听端口
server_name localhost;# 域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html;# 站点目录
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
# access_log off;
}
access_log off;
}
}
检查配置文件 nginx.conf 的正确性命令:
[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t
启动 Nginx
Nginx 启动命令如下:
[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx
访问站点
从浏览器访问我们配置的站点 ip:
Nginx 其他命令
以下包含了 Nginx 常用的几个命令:
/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
nginx 安装其他参考
1. 安装 pcre 依赖
yum -y install pcre*
2. 安装 openssl 依赖
`yum -y install openssl*`
以上两个都安装玩之后,接下来开始正式安装了
3. 在根目录创建一个 nginx 目录
在根目录也就是 root 这个目录创建了一个 nginx 文件,这里面都存放我们安装的 nginx
mkdir nginx
4. 安装 nginx 服务
wget http://nginx.org/download/nginx-1.14.2.tar.gz 这个是一个压缩文件
5. 解压 nginx 安装包
tar -zxvf nginx-1.14.2.tar.gz
.6. 进入解压的目录 cd nginx-1.14.2.tar.gz
./configure 执行文件,检查配置文件是否生效
7. 编译
make -j4
8. 安装依赖
make install
9. 进入 /usr/bin/ 的目录下
`ln -s /usr/local/nginx/sbin/nginx nginx ``// 相当于一个快捷方式 `
9.9 返回主界面
直接输入 cd 就可以返回主界面 通过输入 pwd 可以查看到返回的是不是主界面
10 启动 nginx
直接输入 nginx 就可以启动
通过输入 ps -ef|grep nginx 可以看到进程
在浏览器地址栏输入自己服务器的 ip 地址就可以看到下面的界面了
如果启动遇到 nginx: [emerg] getpwnam(“nginx”) failed 这个错误。少了用户配置
useradd -s /sbin/nologin -M nginx
id nginx
netstat -tlunp | grep nginx 启动命令
或者在过程中出现 [emerg] mkdir()“/var/temp/nginx/client”failed (2: No such file or directory) 错误 执行
sudo mkdir -p /var/tem/nginx/client 这个 sudo 我不要加,应为我的就是 root 权限了,如果不是的需要加
9.nginx 服务器自定义访问配置
先在我们的根目录通过 下面命令访问我们的主配置文件
`vim /usr/local/nginx/conf/nginx.conf`
第一行修改成这样
然后在最下面中添加 include /root/nginx/*.conf, 等会在 nginx 目录中创建一个 nginx 目录
修改完之后,保存退出
按住 shift + : 输入:wq! 是保存突出
按 i 这个键是先升级编辑
按 ecs 是退出编辑
9.1 返回根目录中,先进入 nginx 这个目录,在目录创建一个
`mkdir nginx.conf 文件 `
通过命令 进入这个里面进行编辑
server_name 是写入自己的服务器上的 ip 地址或者 localhost, 写完之后保存退出;
root /root/nginx/upload 这个是监听到 nginx 下面的 upload 目录里面的 index.html 文件,等会会在 nginx 目录创建一个 upload 目录
9.2 这样的话,我们监听的端口号就是 8080 了,但是和主文件的监听的端口号一样了,所以需要再次修改主文件的端口号,把他改成其他的端口号就行了
然后再次保存退出,
9.3 检查 nginx 配置是否成功
nginx -t // 出现下面的情况就算配置正确了;
9.4 在 nginx 目录中创建 upload 目录,等会就会写一个 hindextml 文件
9.5 在 upload 目录中,输入
`vim index.html 创建了一个 index.html 文件,`
里面写一些内容,然后保存退出
最后配置完之后重启一下 nginx 服务器
`nginx -s reload `
如果重启过程中遇到下面的问题
nginx: [error] invalid PID number“”in“/usr/local/var/run/nginx/nginx.pid”pid 位置不对
pkill nginx 先杀死,然后在次重启一下就好了
然后在我们浏览器访问服务器的 ip 地址就可以看到我们写入的内容了;
如果我们访问的 ip 地址访问的时候,用于都是 nginx 欢迎页面,说明我门配置的时候没有配置好对应的 nginx.conf 文件,可以通过 nginx - t 查看到 nginx 所配置的环境是在那个目录里面
然后在住目录,通过 vim /etc/nginx/nginx.conf 进入再次编辑一下,保存就可以了。
开启 GZIP
Nginx 开启 Gzip 压缩功能,可以使网站的 css、js、xml、html 文件在传输时进行压缩,提高访问速度, 进而优化 Nginx 性能! Web 网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于图片没有必要支压缩,如果想要优化,可以图片的生命周期设置长一点,让客户端来缓存。开启 Gzip 功能后,Nginx 服务器会根据配置的策略对发送的内容, 如 css、js、xml、html 等静态资源进行压缩, 使得这些内容大小减少,在用户接收到返回内容之前对其进行处理,以压缩后的数据展现给客户。这样不仅可以节约大量的出口带宽,提高传输效率,还能提升用户快的感知体验, 一举两得; 尽管会消耗一定的 cpu 资源,但是为了给用户更好的体验还是值得的。
经过 Gzip 压缩后页面大小可以变为原来的 30% 甚至更小,这样,用户浏览页面的时候速度会快得多。Gzip 的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的巨大多数浏览器 都支持解析 Gzip 过的页面。
Gzip 压缩作用
将响应报⽂发送⾄客户端之前可以启⽤压缩功能,这能够有效地节约带宽,并提⾼响应⾄客户端的速度。Gzip 压缩可以配置 http,server 和 location 模块下。Nginx 开启 Gzip 压缩参数说明:
`gzip` `on; ``# 决定是否开启 gzip 模块,on 表示开启,off 表示关闭;``gzip_min_length 1k; ``# 设置允许压缩的页面最小字节 (从 header 头的 Content-Length 中获取),当返回内容大于此值时才会使用 gzip 进行压缩, 以 K 为单位, 当值为 0 时,所有页面都进行压缩。建议大于 1k``gzip_buffers 4 16k; ``# 设置 gzip 申请内存的大小, 其作用是按块大小的倍数申请内存空间,param2:int(k) 后面单位是 k。这里设置以 16k 为单位, 按照原始数据大小以 16k 为单位的 4 倍申请内存 ``gzip_http_version 1.1; ``# 识别 http 协议的版本, 早起浏览器可能不支持 gzip 自解压, 用户会看到乱码 ``gzip_comp_level 2; ``# 设置 gzip 压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大;等级 1 -9,最小的压缩最快 但是消耗 cpu``gzip_types text``/plain` `application``/x-javascript` `text``/css` `application``/xml``; ``# 设置需要压缩的 MIME 类型, 非设置值不进行压缩,即匹配压缩类型 ``gzip_vary on; ``# 启用应答头 "Vary: Accept-Encoding"` `gzip_proxied off;``nginx 做为反向代理时启用,off(关闭所有代理结果的数据的压缩),expired(启用压缩, 如果 header 头中包括 ``"Expires"`` 头信息),no-cache(启用压缩,header 头中包含 ``"Cache-Control:no-cache"``),``no-store(启用压缩,header 头中包含 ``"Cache-Control:no-store"``),private(启用压缩,header 头中包含 ``"Cache-Control:private"``),no_last_modefied(启用压缩,header 头中不包含 `` ``"Last-Modified"``),no_etag(启用压缩, 如果 header 头中不包含 ``"Etag"`` 头信息),auth(启用压缩, 如果 header 头中包含 ``"Authorization"`` 头信息)` `gzip_disable msie6;``(IE5.5 和 IE6 SP1 使用 msie6 参数来禁止 ``gzip`` 压缩) 指定哪些不需要 ``gzip`` 压缩的浏览器 (将和 User-Agents 进行匹配), 依赖于 PCRE 库 ` `######################################################################################################``# 如下:修改 nginx 配置文件 /usr/local/nginx/conf/nginx.conf``[root@localhost ~]``# vim /usr/local/nginx/conf/nginx.conf #将以下配置放到 nginx.conf 的 http{...} 区域中 ` `# 修改配置为 ``gzip` `on; ``# 开启 gzip 压缩功能 ``gzip_min_length 10k; ``# 设置允许压缩的页面最小字节数; 这里表示如果文件小于 10 个字节,就不用压缩,因为没有意义,本来就很小. ``gzip_buffers 4 16k; ``# 设置压缩缓冲区大小,此处设置为 4 个 16K 内存作为压缩结果流缓存 ``gzip_http_version 1.1; ``# 压缩版本 ``gzip_comp_level 2; ``# 设置压缩比率,最小为 1,处理速度快,传输速度慢;9 为最大压缩比,处理速度慢,传输速度快; 这里表示压缩级别,可以是 0 到 9 中的任一个,级别越高,压缩就越小,节省了带宽资源,但同时也消耗 CPU 资源,所以一般折中为 6``gzip` `types text``/css` `text``/xml` `application``/javascript``; ``# 制定压缩的类型, 线上配置时尽可能配置多的压缩类型!``gzip_disable ``"MSIE [1-6]\."``; ``# 配置禁用 gzip 条件,支持正则。此处表示 ie6 及以下不启用 gzip(因为 ie 低版本不支持)``gzip` `vary on; ``# 选择支持 vary header;改选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面; 这个可以不写,表示在传送数据时,给客户端说明我使用了 gzip 压缩 `
如下是线上常使用的
Gzip 压缩配置
`[root@external-lb02 ~]``# cat /data/nginx/conf/nginx.conf``........``http {``.......`` ``gzip` `on;`` ``gzip_min_length 1k;`` ``gzip_buffers 4 16k;`` ``gzip_http_version 1.1;`` ``gzip_comp_level 9;`` ``gzip_types text``/plain` `application``/x-javascript` `text``/css` `application``/xml` `text``/javascript` `application``/x-httpd-php` `application``/javascript` `application``/json``;`` ``gzip_disable ``"MSIE [1-6]\."``;`` ``gzip_vary on;` `}`
如果不开启 Gzip 压缩功能(即注释掉 Gzip 的相关配置), 查看某个图片大小
`[root@external-lb02 ~]``# ll -h /data/web//www/test.bmp ``-rw-r--r-- 1 root root 453K 3 月 14 18:43 ``/data/web//www/test``.bmp`
如下可知, 文件没有被压缩, 文件传输大小还是 400 多 K
如果开启 Nginx 的 Gzip 压缩功能(即打开 Gzip 的相关配置), 然后再次访问 test.bmp 图片, 发现压缩后的该图片文件传输大小只有 200 多 K !
通过上面测试对比, 发现 Nginx 开启 Gzip 压缩功能后, 定义的 gzip type 的文件在传输时的大小明显变小, 这样这会大大提高 nginx 访问性能.
直接用 curl 测试命令:
`[root@fvtlb02 ~]``# curl -I -H "Accept-Encoding: gzip, deflate" "http://fvtvfc-web.kevin.com/service-worker.js"``HTTP``/1``.1 200 OK``Server: nginx``/1``.12.2``Date: Mon, 26 Nov 2018 02:19:16 GMT``Content-Type: application``/javascript``; charset=utf-8``Connection: keep-alive``Vary: Accept-Encoding``Last-Modified: Sun, 25 Nov 2018 22:28:15 GMT``Vary: Accept-Encoding``ETag: W/``"5bfb21ff-40be"``Content-Encoding: ``gzip` ` 如上,response header 头信息中出现 ``"Conten_Encoding: gzip"` `, 就说明 Nginx 已开启了压缩 (在浏览器访问, 通过 F12 看请求的响应头部 也是一样)`
Nginx 的 Gzip 压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能。
1) 图片类型资源 (还有视频文件)
原因:图片如 jpg、png 文件本身就会有压缩,所以就算开启 gzip 后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。(可以试试将一张 jpg 图片压缩为 zip,观察大小并没有多大的变化。虽然 zip 和 gzip 算法不一样,但是可以看出压缩图片的价值并不大)
2) 大文件资源
原因:会消耗大量的 cpu 资源,且不一定有明显的效果。
参考文档:
1.https://www.runoob.com/linux/…
2.https://www.cnblogs.com/kevin…