linux复盘:构架搭建lnmp(配置)

霸气de小男生 提交于 2019-12-01 23:54:51

nginx虚拟主机

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

增加include vhost/*.conf;

mkdir /usr/local/nginx/conf/vhost

vim /usr/local/nginx/conf/vhost/aaa.com.conf #虚拟主机配置文件

server
{
    listen 80 default_server;   (有default_serve就是默认虚拟主机)
    server_name aaa.com;     (定义网站名字)
    index index.html index.htm index.php;
    root /data/wwwroot/default;  (定义配置文件目录,还没创建)
}

如果给虚拟主机配置php解析就加入:

server
{
    listen 80 default_server;   
    server_name aaa.com;    
    index index.html index.htm index.php;
    root /data/wwwroot/default; 
    location ~ \.php$
        {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
        }
}

nginx用户认证

vim /usr/local/nginx/conf/vhost/test.com.conf
server
{
    listen 80;
    server_name test.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;

    location  /
    {
        auth_basic              "Auth";   #用户认证的名字
        auth_basic_user_file   /usr/local/nginx/conf/htpasswd;   #用户的密码文件
     }
}

创建密码文件在此需要使用Apache的/usr/local/apache/bin/htpasswd命令,需要使用yum安装httpd命令:

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

nginx域名重定向

vim /usr/local/nginx/conf/vhost/test.com.conf
server
{
    listen 80;
    server_name test.com test1.com test2.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;
    if ($host != 'test.com' ) {
        rewrite  ^/(.*)$  http://test.com/$1  permanent;           (这里指不是rest.com的全部跳转)
    }
}

nginx访问日志

vim /usr/local/nginx/conf/vhost/test.com.conf

access_log /tmp/test.com.log quyifan 

nginx日志切割

vim /usr/local/sbin/nginx_log_rotate.sh  shell脚本保存在这里
配置如下
#! /bin/bash
d=`date -d "-1 day" +%Y%m%d` 
#定义切割时间(切割一天前的日志)
logdir="/tmp/"
#此处指定要切割的日志路径(该路径来自虚拟主机配置文件)
nginx_pid="/usr/local/nginx/logs/nginx.pid"
#调用pid的目的是执行命令:/bin/kill -HUP `cat $nginx_pid`
#该命令等价于命令:nginx -s reload(重新加载文件),确保与虚拟主机配置文件变更保持同步
#该地址来自nginx配置文件
cd $logdir
for log in `ls *.log`
do
    mv $log $log-$d
done
#此处使用通配进行循环,对所有复合条件的日志文件进行切割
/bin/kill -HUP `cat $nginx_pid`
#执行此命令进行重载生成新的日志文件来记录新的日志

nginx静态不记录日志和过期时间

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$   正则
    {
          expires      7d;  (上下写一起是因为设置的过期时间不同)
          access_log off;
    }
location ~ .*\.(js|css)$
    {
          expires      12h;
          access_log off;
    }

防盗链

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
    expires 7d;
    valid_referers none blocked server_names  *.test.com ;
#这里定义.test.com为白名单
    if ($invalid_referer) {
        return 403;
#这里表示如果不在白名单内直接回馈403
    }
    access_log off;
}

nginx访问控制

#限制某些ip不能访问,或者只允许一部分访问
location /admin/
{
    allow 192.168.153.130;
    allow 127.0.0.1;
    deny all;
}

#如果只拒绝几个ip的访问就是
location /admin/
{
    deny 192.168.188.1;
    deny 192.168.8.8;
}

#可以匹配正则来限制
location ~ .*(abc|image)/.*\.php$
{
        deny all;
}

#根据user_agent限制,用的很多受到cc攻击,要禁掉百度蜘蛛,想做被隐藏的网站
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
      return 403;
}
这里~指匹配符号,只要有Spider/3.0或YoudaoBot或Tomato字符串的直接被拒绝,返回403

Nginx解析php

location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock; (此处错误出现502,找不到sock)
        #fastcgi_pass 127.0.0.1:9000
        #fastcgi_pass 两种监听格式,但是要保证Nginx和php-fpm中格式一致
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
        #这里的地址和最上面的root保持一致
    }

Nginx代理

server
{
    listen 80;
    server_name ask.apelearn.com;
 
   location /
    {
        proxy_pass      http://121.201.9.155/;
        #这里是告诉Nginx代理服务器,真正要被访问的web服务器ip是多少
        proxy_set_header Host   $host;
        #Host指的是要访问的域名servername,就是代理服务器真正访问的域名ask.apelearn.com
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

nginx负载均衡

upstream qq
#这里定义后端的web server,可以是一个或多个
{
    ip_hash;
    #表示负载均衡算法,表示根据ip地址把请求分到不同服务器上(同一个用户始终保持在同一个机器上)
    #例如访问阿铭论坛,第一次在发帖子登录,刷新后发现没登录,就是访问到另一个机器上了
    #用户A与用户Bip不同,A访问时会把请求转发到第一个web server上,B访问会到第二个web server上
    #这种算法用在把session存到本机磁盘的情况
    server 61.135.157.156:80;
    server 125.39.240.113:80;
    #这里定义多个ip
}
server
{
    listen 80;
    server_name www.qq.com;
    location /
    {
        proxy_pass      http://qq;(这里写upstream的名字,代表它下面的ip)
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

nginx配置ssl

server
{
    listen 443;
    server_name aming.com;
    index index.html index.php;
    root /data/wwwroot/aming.com;
    ssl on;
    ssl_certificate aminglinux.crt;
    ssl_certificate_key aminglinux.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

php-fpm配置文件

php-fpm作为独立的一个服务存在,必然有自己的配置文件,/usr/local/php-fpm/etc/php-fpm.conf

vim /usr/local/php-fpm/etc/php-fpm.conf
#加入第二行配置,这里没有把两个pool分开
[aming]
listen = /tmp/aming.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

vim /usr/local/php-fpm/etc/php-fpm.conf   //主配置文件中的[global]部分增加
include = etc/php-fpm.d/*.conf

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
#这里把两个pool分开和nginx.conf类似

vim /usr/local/nginx/conf/vhost/aaa.com.conf
location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/aming.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
    }

php-fpm慢执行日志

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容

request_slowlog_timeout = 1  (可以写成两秒很多脚本都超过一秒)
#定义超时时间,即php的脚本执行时间超过1秒就会记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log
#定义慢执行日志的路径和名字,遇到php网站访问卡顿,来查看这个慢执行日志

open_basedir

安全限制

当一台服务器跑多个站点时,使用openbasedir限定各个站点所能访问的服务器上的目录的范围

vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入如下内容
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/

php-fpm进程管理

 vim  /usr/local/php/etc/php-fpm.d/www.conf 配置文件内容
 pm = dynamic  
 #定义php子进程启动模式,dynamic动态进程管理模式,指一开始启动少量子进程,根据实际需求,动态的增加或减少子进程,最多不超过下面pm.max_children定义的数值
 #也可以是static,这种模式下进程数由pm.max_children决定,一次性启动这么多,不会增加或减少
 pm.max_children = 50 
 #最大子进程数,ps aux可以查看
 pm.start_servers = 20 
 #针对dynamic模式,定义启动php-fpm服务时会启动的进程数
 pm.min_spare_servers = 5 
 #针对dynamic模式,定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程
 pm.max_spare_servers = 35 
 #针对dynamic模式,定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程
 pm.max_requests = 500  
 #针对dynamic模式,定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!