【1】下载软件
这里我选择下载nginx-1.14.0版本。点击上图标记部分,进入下图界面:
点击nginx-1.14.0下载软件包。
【2】安装nginx
1)解压
[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz
2)预编译
进入解压目录,执行下面的命令你可以看到nginx所支持的模块,根据自己需要选择模块。
[root@server1 nginx-1.14.0]# ./configure --help
这里我选了几个常用的模块进行编译,汉字仅作解释实际编译时不能有。
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx \ 指定安装目录
> --with-http_ssl_module \
> --with-http_stub_status_module \
> --with-file-aio \
> --with-threads \
> --user=nginx --group=nginx 指定用户和组
预编译过程中主要是检测环境,过程可能会报错提示你什么东西没有,你只需要安装相应的依赖包即可,比如,缺少gcc,你安装gcc-devel即可,其他同上。
3)编译并安装
完成预编译后需要编译和安装,执行下面的指令即可。
[root@server1 nginx-1.14.0]# make && make install
注:如果系统告诉你不识别make指令,那么你只需要通过下面的指令找到make命令的安装包,然后通过yum安装即可。
[root@server1 nginx-1.14.0]# yum provides make
经过上面的步骤nginx已经安装成功了。
【3】配置
1)第一次启动测试
在编译的时候指定了nginx用户和组因此需要创建nginx用户:
[root@server1 sbin]# useradd -u 800 nginx
Nginx是通过nginx脚本启动的,脚本在安装目录的nginx/sbin/里面,为了方便,你可以通过软连接大方式将脚本连接到/usr/sbin底下,这样调用比较方便,如下:
[root@server1 sbin]# pwd
/usr/local/lnmp/nginx/sbin 我的安装目录
[root@server1 sbin]# ls
nginx 脚本
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/ 软连接
启动nginx只需要运行nginx脚本即可:
[root@server1 sbin]# nginx
在浏览器访问主机IP即可看到下图界面。
2)配置文件
Nginx配置文件在安装目录底下的conf目录底下,例如下图:
[root@server1 conf]# pwd
/usr/local/lnmp/nginx/conf
[root@server1 conf]# ls
fastcgi.conf koi-win scgi_params
fastcgi.conf.default mime.types scgi_params.default
fastcgi_params mime.types.default uwsgi_params
fastcgi_params.default nginx.conf uwsgi_params.default
koi-utf nginx.conf.default win-utf
Nginx的配置文件是nginx.conf
3)配置文件参数说明
user nobody; #默认运行用户是nobody,将这里改为nginx
worker_processes 1; #启动进程,通常设置成和cpu的数量相等
#全局错误日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式及连接数上限
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
#单个后台worker process进程的最大并发链接数
worker_connections 1024;
# 并发总数是 worker_processes 和 worker_connections 的乘积
# 即 max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4
# 反向代理要除以4,是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
# ulimit -SHn 65535
}
http {
#设定mime类型,类型由mime.type文件定义
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"';
access_log logs/access.log main;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
tcp_nodelay on;
#开启gzip压缩
gzip on;
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.nginx.cn访问
server_name www.nginx.cn;
#定义服务器的默认网站根目录位置
root html;
#设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
#默认请求
location / {
#定义首页索引文件的名称
index index.php index.html index.htm;
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}
2)了解了配置文件功能现在来练练手
进行下面实验之前先进行简单配置,主要改下面几项:
user nginx;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
更改完配置文件需要重新加载nginx
[root@server1 conf]# nginx -s reload
(1)更改worker_connections
切换到nginx用户,通过下面命令可以查看用户创建文件的最大数量:
在文件limits.conf中可以配置用户创建文件的最大数量:
第一项为用户名称、第二项中soft表示软限制,hard表示硬限制,-表示都限制。
注:文件更改需要切换到root用户。
做了上面的操作你就可以根据你设定的值配置nginx.conf中下面的参数:
events {
worker_connections 65535;
}
(2)添加认证
将cert.key改为cert.pem
创建认证证书:
进入/etc/pki/tls/certs目录,执行命令make cert.pem
[root@server1 conf]# cd /etc/pki/tls/certs/
[root@server1 certs]# ls
ca-bundle.crt ca-bundle.trust.crt make-dummy-cert Makefile renew-dummy-cert
[root@server1 certs]# make cert.pem
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
cat $PEM1 > cert.pem ; \
echo "" >> cert.pem ; \
cat $PEM2 >> cert.pem ; \
rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
............................................+++
.....................................................+++
writing new private key to '/tmp/openssl.av2Zbo'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shaanxi
Locality Name (eg, city) [Default City]:Xi'an
Organization Name (eg, company) [Default Company Ltd]:random
Organizational Unit Name (eg, section) []:random
Common Name (eg, your name or your server's hostname) []:wang
Email Address []:[email protected]
根据提示输入正确格式的信息即可,可以看到生成的文件名称为cert.pem
将文件cert.pem移动到/usr/local/lnmp/nginx/conf/目录并重新加载服务:
[root@server1 certs]# mv cert.pem /usr/local/lnmp/nginx/conf/
[root@server1 certs]# nginx -s reload
在浏览器输入https:172.25.37.11进入下面的界面,选择Add Exception添加证书:
然后会弹出下面的界面,然后选择标记部分就会成功获取证书然后会进入Nginx服务界面:
(1)nginx虚拟机
更改默认发布目录,你只需要将配置文件中的root后面改为你自己的目录,建议写绝对路径。如下面的配置,访问本机IP会看到/www目录底下的html文件:
location / {
root /www;
index index.html index.htm;
}
你也可以通过在配置文件中添加类似下面的结构实现不同域名访问不同目录
,也就是配置nginx虚拟机。
server {
listen 80;
server_name www.test.org;
location / {
root /www1;
index index.html;
}
}
server {
listen 80;
server_name www.test2.org;
location / {
root /www2;
index index.html;
}
}
注:这一部分内容要加在http{}模块内。另外别忘记了创建/www1和/www2目录,并将你的index.html文件放进去。如下:
[root@server1 ~]# mkdir /www{1,2}
[root@server1 ~]# echo "i am from www.test.org" > /www1/index.html
[root@server1 ~]# echo "i am from www.test2.org" > /www2/index.html
通过上面的配置你就可以实现访问www.test.org使读取的是/www1底下的html文件,访问www.test.org使读取的是/www2底下的html文件。
注:通过域名访问时需要在/etc/hosts添加域名解析如:
[root@server1 ~]# echo '172.25.37.11 www.test.org' >> /etc/hosts
[root@server1 ~]# echo '172.25.37.11 www.test2.org' >> /etc/hosts
测试:
[root@server1 conf]# nginx -s reload
[root@server1 conf]# curl www.test.org
i am from www.test.org
[root@server1 conf]# curl www.test2.org
i am from www.test2.org
(3)访问强制转换为https模式
配置1
server {
listen 80;
server_name www.wang.org;
注:下面三个rewrite和最后一个return任选一个都可以。
#rewrite ^(.*)$ https://$host$1 permanent;
#rewrite ^/(.*)$ http://dev.wangshibo.com/$1 permanent;
#rewrite ^ http://dev.wangshibo.com$request_uri? permanent;
return 301 https://$server_name$request_uri; //这是nginx最新支持的写法
location / {
root html;
index index.html index.htm;
}
配置2
这个配置主要针对域名访问跳转
server {
listen 80;
server_name localhost;
if ($host ~* "^wang.com$") {
rewrite ^/(.*)$ https://localhost/ permanent;
}
location / {
root html;
index index.html index.htm;
}
}
注:上面的配置当你访问域名结尾为wang.com的域名时会跳转到https://localhost
(4)nginx的status模块
在配置文件中添加下面的内容:
location /status {
stub_status on;
access_log off;
allow 172.25.37.250; 允许指定IP访问
deny all; 其他全部禁止
}
在浏览器输入172.25.37.11/status或者在终端访问:
[root@localhost ~]# curl 172.25.37.11/status
Active connections: 1
server accepts handled requests
21 21 27
Reading: 0 Writing: 1 Waiting: 0
注:因为浏览器有缓存因此强烈建议通过终端访问。
(5)nginx实现轮询
创建语句块实现轮询:
注:语句块中172.25.37.2和172.25.37.3为提供web服务的两台主机。
当访问www.wang.org时进行轮询:
通过权重调整服务器被调用的次数:
注:权重越大优先级越高
upstream Random_w {
server 172.25.37.2:80 weight=2;
server 172.25.37.3:80 backup;
}
ip_hash方式:
说明:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的题目。
upstream Random_w {
ip_hash;
server 172.25.37.2:80 ;
server 172.25.37.3:80 ;
sticky方式:
说明:Sticky就是基于cookie的一种负载均衡解决方案,通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。
1)安装软件nginx-sticky-module
下载地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
2)解压
[root@server1 ~]# tar zxf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz
[root@server1 ~]# mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky
3)编译并安装
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx \ 指定安装目录
> --with-http_ssl_module \
> --with-http_stub_status_module \
> --with-file-aio \
> --with-threads \
> --add-module=/root/nginx-sticky \ 这里写你自己的nginx-sticky目录
> --user=nginx --group=nginx 指定用户和组
[root@server1 ~]# make && make install
4)配置
在nginx.conf文件中加入下面的内容,当你访问www.test.org时,访问到172.25.37.1或172.25.37.2的80端口。
upstream random {
sticky;
server 172.25.37.1:80;
server 172.25.37.2:80;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://random/;
}
}
(6)支持PHP配置
1)在nginx.conf配置文件中将下列项目的注释去掉
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
注: 访问php文件时,解析使用127.0.0.1:9000。
fastcgi_index index.php;
include fastcgi.conf;
}
2)php安装请看我的博客:LNMP超详细教程架构(二)PHP安装教程
3)测试