zoukankan      html  css  js  c++  java
  • LNMP环境配置

    LAMP与LNMP 不同之处Nginx,N比A在静态上厉害 ,在动态上A比N厉害。

    1.1 安装mysql 与lamp一样

    1.2 安装php 与之前编译不同

    (1)下载 wget   解压 tar

    (2)编译 

     ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-pear --with-curl --with-openssl

    (3)安装

    make && make install

    (4)修改配置文件

    cp php.ini-production /usr/local/php-fpm/etc/php.ini

    vim /usr/local/php-fpm/etc/php-fpm.conf 写入

    [global]
    pid = /usr/local/php-fpm/var/run/php-fpm.pid
    error_log = /usr/local/php-fpm/var/log/php-fpm.log
    [www]
    listen = /tmp/php-fcgi.sock
    listen.mode = 666
    user = php-fpm
    group = php-fpm
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 20
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    pm.max_requests = 500
    rlimit_files =1024

    检验配置是否正确

    /usr/local/php-fpm/sbin/php-fpm -t

     successful 成功 !!!

    (5)启动php-fpm

    cp /usr/local/src/php-5.6.36/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

    chmod 755 /etc/init.d/php-fpm

    useradd -s /sbin/nologin php-fpm

    service php-fpm start

    设置php-fpm开机启动

    chkconfig php-fpm on

    检测php-fpm是否启动

    ps aux |grep php-fpm

     会显示二十多个进程

    1.3安装Nginx

    (1)下载wget 解压 tar

    (2)配置编译

    ./configure --prefix=/usr/local/nginx

    (3)安装

    make && make install

    (4)编写启动脚本

    vim /etc/init.d/nginx

    #!/bin/bash
    # chkconfig: - 30 21
    # description: http service.
    # Source Function Library
    . /etc/init.d/functions
    # Nginx Settings
    NGINX_SBIN="/usr/local/nginx/sbin/nginx"
    NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
    NGINX_PID="/usr/local/nginx/logs/nginx.pid"
    RETVAL=0
    prog="Nginx"
    start()
    {
    echo -n $"Starting $prog: "
    mkdir -p /dev/shm/nginx_temp
    daemon $NGINX_SBIN -c $NGINX_CONF
    RETVAL=$?
    echo
    return $RETVAL
    }
    stop()
    {
    echo -n $"Stopping $prog: "
    killproc -p $NGINX_PID $NGINX_SBIN -TERM
    rm -rf /dev/shm/nginx_temp
    RETVAL=$?
    echo
    return $RETVAL
    }
    reload()
    {
    echo -n $"Reloading $prog: "
    killproc -p $NGINX_PID $NGINX_SBIN -HUP
    RETVAL=$?
    echo
    return $RETVAL
    }
    restart()
    {
    stop
    start
    }
    configtest()
    {
    $NGINX_SBIN -c $NGINX_CONF -t
    return 0
    }
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    reload)
    reload
    ;;
    restart)
    restart
    ;;
    configtest)
    configtest
    ;;
    *)
    echo $"Usage: $0 {start|stop|reload|restart|configtest}"
    RETVAL=1
    esac
    exit $RETVAL

    更改文件权限

    chmod 755 /etc/init.d/nginx

    chkconfig --add nginx

    chkconfig nginx on

    (5)更改Nginx的配置文件

    清空原来配置文件

    > /usr/local/nginx/conf/nginx.conf

    写下内容

    vim /usr/local/nginx/conf/nginx.conf

    user nobody nobody;
    worker_processes 2;
    error_log /usr/local/nginx/logs/nginx_error.log crit;
    pid /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;
    events
    {
    use epoll;
    worker_connections 6000;
    }
    http
    {
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;
    server
    {
    listen 80;
    server_name localhost;
    index index.html index.htm index.php;
    root /usr/local/nginx/html;
    location ~ .php$
    {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php-fcgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
    }
    }
    }

    检查是否正确

    /usr/local/nginx/sbin/nginx -t

    正确 。

    (6)启动Nginx

    service nginx start 

    // 如果启动失败

    检查nginx是否启动 ps aux |grep nginx

    没有启动成功 

     

     发现80端口被占用

    查看80端口

     kill -9 端口号杀死进程

    杀光80端口进程之后 重新启动

     成功!

    再查看Nginx是否启动成功

     成功!

    (7)测试是否能解析php

    创建文件 编写内容

     解析正常!

    1.4Nginx配置

    (1)默认虚拟主机

     // 第一个被Nginx加载的虚拟主机就是默认主机。但是可以标记,也就是被标记的主机就是默认虚拟主机,没有标记第一个虚拟主机就是默认虚拟主机。

    修改主配置文件在nginx.conf中加入如下

     //意思就是在/usr/local/nginx/conf/vhost下所有文件都以.conf结尾的文件都加载

    所有的虚拟主机配置文件都放在vhost目录下

    vim default.conf 写入

     检查是否正确 -t

    重新加载文件 -s reload

    echo "default_server" > /data/nginx/default/index.html //创建索引页

    访问 

     访问一个没有定义过的域名,也会访问aaa.com

     (2)用户认证

    重建文件 vim test.com.conf 写入如下

     创建用户密码

    htpasswd -c /usr/local/nginx/conf/htpasswd aaa

    检测 -t 重新加载 -s reload

    mkdir /data/nginx/test.com //创建文件写入内容

    echo "test.com" > /data/nginx/test.com/index.html 

    curl 

     回401需要用户认证

    在hosts加入192.168.200.17 test.com

    浏览器访问 

     针对某个目录 需要修改location

     访问admin目录需要密码

    访问test.com正常

     

    (3) 域名重定向 

    与httpd相似但是更容易理解,改写如下

     server_name后面可以跟多个域名,permanent为永久重定向,相当于httpd的301,这里用到的是redirect,相当于httpd的R=302.

    检查错误-t 重新加载文件-s reload

    curl

    (4) 访问日志

    查看Nginx的日志格式

     $remote_addr 为访问网站的用户的出口IP; $http_x_ forwarded_ for 为代理服务器的IP,如果使用了代理,则会记录代理的IP; $time_local为当前的时间; $host为访问的主机名; $request_uri为访问的URL地址; $status 为状态码; $http_ referer 为referer地址; $http_ user _agent为user_ agent。

     写入如下  access_log /tmp/1.log combined_realip;

    查看

     日志切割脚本

    1.4.5配置静态文件不记录日志并添加过期时间

    修改如下

     location~可以指定对应静态文件,expires配置过期时间,access_log配置为off就可以不记录访问日志。

    检测错误 -t 重新加载 -s reload

    建立js jpg 和对比的jss文件

    curl测试 //Cache-Control是对应时间

    查看日志 发现只记录了 jss文件 

    1.4.6 Nginx防盗链

    修改配置文件为

     访问其他网址403无法访问,允许的访问成功。

     1.4.7 访问控制

    限制IP

    allow允许 deny 拒绝 

    限制admin目录只允许192.168.200.17访问 其他的都拒绝

       | 表示分隔符 或者的意思 意思是可以访问带有abc或image的字符串,并且是PHP的请求拒绝访问。

     

    也可以针对的user_augent中 ~意思是匹配号,只要u中含有S Y T字符串的都拒绝,return 403 是直接返回403,也可以是别的。

     1.4.8 Nignx解析PHP

    PHP配置

    test.com.conf中

     fastcgi_pass用来指定php-fpm,这个地址一定要和php-fpm服务监听的地址匹配

    1.4.9Nginx代理

    如果Nginx中有多台Web服务器,如果同时代理,那么Nginx在这里起到一个负载均衡的作用。vim proxy.conf 写入如下内容

    Proxy_pass指定要代理的域名所在的服务器的IP

    后三行为定义发往后端Web服务器的请求头,第二行必须有,表示后端Web服务器的域名和当前配置文件中的server_name保持一致,三四行是日志格式。

    验证加载

    安装dig  yum install -y bind-utils

     dig查看对应域名的IP

     可以看到是有两个IP,都可以访问www.baidu.com

    curl 测试

     配置负载均衡

    vim /usr/local/nginx/conf/vhost/load.conf 写入

     验证重新加载 curl测试

     这是自己的虚拟机可以访问www.baidu.com.这个就是代理的作用。

    1.4.10 Nignx配置SSL

    自定义生成一对ssl证书

    配置如下

     生成key文件(私钥) 2048是加密字符串的长度,输入密码

     把刚生成的tmp.key转换成aminglinux.key 目的是删除刚才设置的密码,如果key文件有密码,则必须在Nginx加载它的时候输入它的密码,很不方便

     

     这一步是生成证书请求文件,并不是公钥,但是必须有这个文件,要用key文件和这个csr文件一起生成最终的公钥文件。

     这样最终生成了crt证书,也就是公钥。

    这样的目的就是生成aminglinux.key和aminglinux.crt两个文件,用这两个文件配置Nginx,

    vim /usr/local/nginx/conf/vhost/ssl.conf 

    保存之后 检查配置出错。因为Nginx并不支持ssl,所以重新编译安装

     再次测试 并创建对应的目录和测试文件

    在hosts中写入

    192.168.200.17 aming.com

    用浏览器访问

    会提示不安全,因为是自己制作的所以没有浏览器的认可。

    1.5 php-fpm的配置

    1.5.1php-fpm的pool

     Nginx可以配置多个虚拟主机,php-fpm也同样可以配置多个pool

    编辑如下 加入include一行

     

     创建配置文件目录和子配置文件

    mkdir /usr/local/php-fpm/etc/php-fpm.d

    vim www.conf

     vim aming.conf

     这样就有两个pool,第一个pool监听/tmp/www.sock 第二个监听/tmp/aming.sock

    检查一下配置

     重启下一php-fpm服务

     查看/tmp/目录下sock文件

     1.5.2 php-fpm 的慢执行日志

    vim www.conf

     1.5.3 php-fpm 定义 open_basedir

  • 相关阅读:
    工作实战之项目常用技术
    Thymeleaf的错误解决方式
    实用小demo
    idea常用的几个插件
    idea2019+Plugins中搜索不到任何插件解决办法
    git的初体验
    springboot2.+的整合log4j2错误解决浅谈
    MobaXterm百度网盘下载
    阿里云RDS云数据库连接步骤
    读源码学编程之——死循环妙用
  • 原文地址:https://www.cnblogs.com/Job123/p/12132122.html
Copyright © 2011-2022 走看看