LNMP架构超详细教程(一)nginx安装教程

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 []:1214469162@qq.com

根据提示输入正确格式的信息即可,可以看到生成的文件名称为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)nginxstatus模块

在配置文件中添加下面的内容:

 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

注:因为浏览器有缓存因此强烈建议通过终端访问。

5nginx实现轮询

创建语句块实现轮询:

注:语句块中172.25.37.2172.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方式:

说明:每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器,可以解决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.1172.25.37.280端口。

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.19000

     fastcgi_index  index.php;

     include        fastcgi.conf;

   }

2php安装请看我的博客:LNMP超详细教程架构(二)PHP安装教程

3)测试


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值