zoukankan      html  css  js  c++  java
  • nginx

    nginx 查看配置文件
    首先执行命令找到nginx路径
    ps aux | grep nginx
    如nginx路径为
    /usr/local/nginx/sbin/nginx

    nginx -t #可以查到配置文件的信息
    ---------------------------------------------------------------------------------
    nginx 安装

    wget http://mirrors.sohu.com/php/php-5.6.2.tar.gz
    yum -y install gcc gcc-c++ libxml2 libxml2-devel
    tar -xf php-5.6.2.tar.gz
    cd php-5.6.2
    find / -name mysql
    /var/lib/mysql
    ll /var/lib/mysql
    ./configure -enable-fpm -enable-mbstring -with-mysql=/usr/bin/mysql
    find / -name mysql.h
    yum list mysql-devel
    ./configure -enable-fpm -enable-mbstring -with-mysql=/usr;
    #这个配置比较全
    #./configure --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --enable-intl --with-xsl

    make;
    #make ZEND_EXTRA_LIBS='-liconv' #collect2: error: ld returned 1 exit status
    make install
    php
    -v
    cp php.ini-production /usr/local/lib/php.ini
    cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
    cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    chmod a+x /etc/init.d/php-fpm
    /etc/init.d/php-fpm start
    yum -y install pcre*
    yum -y install openssl*
    wget mirrors.sohu.com/nginx/nginx-1.9.0.tar.gz
    tar -zxvf nginx-1.9.0.tar.gz
    cd nginx-1.9.0
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    make
    make install
    find / -name nginx; #/usr/local/nginx/sbin/nginx
    /usr/local/nginx/sbin/nginx; #启动 nginx 进程
    find / -name nginx.conf;
    vi /usr/local/nginx/conf/nginx.conf; #进行配置
    killall nginx; #杀掉进程
    /usr/local/nginx/sbin/nginx -s start; #启动
    /usr/local/nginx/sbin/nginx -s reload; #平滑启动配置
    vi /etc/rc.local; #配置开机启动

    ---------------------------------------------------------------------------------
    nginx 简单操作
    killall nginx - 直接关闭进程
    /usr/local/nginx/sbin/nginx - 这样开启进程
    /usr/local/nginx/sbin/nginx -s reload - 重新加载配置
    /usr/local/nginx/sbin/nginx -s stop - 停止
    ---------------------------------------------------------------------------------
    nginx 开机启动
    在 /etc/rc.local 文件,增加一行 /usr/local/nginx/sbin/nginx
    ---------------------------------------------------------------------------------
    首次配置文

    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"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /usr/local/nginx/host/*.conf; #可以把配置文件分成多个,不必全部网站的配置都写在一起。
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
    server {
            listen      80;
            charset     GBK;
            server_name localhost 192.168.2.31;
            root        /var/www/html/localhost;
            access_log  logs/$fastcgi_script_name.log;
            #location    / { index index.php;}
            location    ~ .*.(php|PHP)?$ {
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME /var/www/html/localhost$fastcgi_script_name; #我擅作主张把$fastcgi_script_name,导致提示access denied错误
                    include        fastcgi_params;
                    fastcgi_intercept_errors on;
            }
    }


    ****************************************** 2016-07-26 ******************************************
    2016/07/26 11:30:07 [crit] 16632#0: *1070 open() "/usr/local/nginx/logs//****/makehtml_archives_action.php.log" failed (2: No such file or directory) while logging request, client: 19.155.66.50, server: localhost, request: "GET /****/makehtml_archives_action.php?endid=0&startid=0&typeid=0&totalnum=3077&startdd=2640&pagesize=20&seltime=0&sstime=1469503757&stime=&etime=&uptype=mkall&mkvalue=0&isremote=0&serviterm= HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "**********", referrer: "http://*********/***********/makehtml_archives_action.php?endid=0&startid=0&typeid=0&totalnum=3077&startdd=2620&pagesize=20&seltime=0&sstime=1469503757&stime=&etime=&uptype=mkall&mkvalue=0&isremote=0&serviterm="

    nginx 的 error_log 日志经常提示这个。应该是配置文件的 access.log 没配置好。配置文件中的 $fastcgi_script_name 应该指的是运行文件的名称。修改为:

    server {
            listen      6080;
            charset     UTF8;
            server_name localhost;
            root        /var/www/html/mmgsj;
            access_log  logs/access.log-mmgjs;
            #location    / { index index.php;}
            location    ~ .*.(php|PHP)?$ {
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME /var/www/html/mmgsj$fastcgi_script_name;
                    include        fastcgi_params;
                    fastcgi_intercept_errors on;
            }
    }
    rewrite 例子
    rewrite ^(.*)-htm-(.*)$ $1.php?$2 last;
    rewrite ^(.*)/simple/([a-z0-9\_]+.html)$ $1/simple/index.php?$2 last;
    rewrite ^(.*)/data/(.*).(htm|php)$ 404.html last;
    rewrite ^(.*)/attachment/(.*).(htm|php)$ 404.html last;
    rewrite ^(.*)/html/(.*).(htm|php)$ 404.html last;

     ThinkPHP 配置的例子

    server {
            listen      80;
            charset     UTF8;
            server_name test.com;
            root        /var/www/html/test;
    
            access_log  logs/access.log-test;
    
            #location ~ .*.(php|PHP)?$ {
            #        fastcgi_pass   127.0.0.1:9000;
            #        fastcgi_index  index.php;
            #        fastcgi_param  SCRIPT_FILENAME /var/www/html/test_soso$fastcgi_script_name;
            #        include        fastcgi_params;
            #        fastcgi_intercept_errors on;
            #}
    
            #去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo
            #如果你不需要用到php5后缀,也可以将其去掉
            location ~ .php
            {
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME /var/www/html/test_soso$fastcgi_script_name;
                    include        fastcgi_params;
                    fastcgi_intercept_errors on;
    
                    #定义变量 $path_info ,用于存放pathinfo信息
                    set $path_info "";
                    #定义变量 $real_script_name,用于存放真实地址
                    set $real_script_name $fastcgi_script_name;

                    #如果地址与引号内的正则表达式匹配
                    if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
                            #将文件地址赋值给变量 $real_script_name
                            set $real_script_name $1;
                            #将文件地址后的参数赋值给变量 $path_info
                            set $path_info $2;
                    }
                    #配置fastcgi的一些参数
                    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                    fastcgi_param SCRIPT_NAME $real_script_name;
                    fastcgi_param PATH_INFO $path_info;
            }

    }

      配置 Laravel 的例子 

    server {
            listen      80;
            charset     UTF8;
            server_name www.mylaravel.com;
            set $root_path '/var/www/html/laravel';
            root        $root_path;
            access_log  logs/access.laravel.log;
            error_log   logs/error.laravel.log;
    
            location / {
                    rewrite ^(.*)$ /public/index.php last;
            }
    
            location ~ .*.(js|css|svg|jpg|ttf|woff2|woff|png)$ {
                    root $root_path/public/;
            }
    
            location ~ .*.(php|PHP)?$ {
                    fastcgi_pass   127.0.0.1:9000;
                    fastcgi_index  index.php;
                    fastcgi_param  SCRIPT_FILENAME $root_path$fastcgi_script_name;
                    include        fastcgi_params;
                    fastcgi_intercept_errors on;
            }
    }
    location /qyapi/ {
           rewrite ^(.*)$ /qyapi/public/index.php last;
    }
    
    location ~ /qyapi/.*.(html|htm)$ {
           root $root_path/;
    }
    
    location ~ /qyapi/.*.(js|css|svg|jpg|ttf|woff2|woff|png)$ {
           root $root_path/;
    }
    下面是php 5.3以上版本将TCP改成socket方式的配置方法:
    
    修改php-fpm.conf(/usr/local/php/etc/php-fpm.conf)
    
    ;listen = 127.0.0.1:9000
    listen = /dev/shm/php-cgi.sock
    
    修改nginx配置文件server段的配置,将http的方式改为socket方式
    
    location ~ .*.(php|php5)?$  {
                    #fastcgi_pass  127.0.0.1:9000;
                    fastcgi_pass   unix:/dev/shm/php-cgi.sock;
                    fastcgi_index index.php;
                    include fastcgi.conf;
            }
    
    重启php-fpm与nginx
    
    service nginx restart
    service php-fpm restart
    ls -al /dev/shm
    
    可以看到php-cgi.sock文件unix套接字类型
    
    理论上,unix socket 不走网络,效率高一些,但稳定性不是很理想,看这个测试:
    alias
    location /abc/ {     alias /home/html/abc/; }
    #在这段配置下,http://test/abc/a.html就指定的是 /home/html/abc/a.html。这段配置亦可改成
    
    root
    location /abc/ {     root /home/html/;}
    #可以看到,使用root设置目录的绝对路径时,少了/abc,也就是说,使用root来设置前端非根目录时,nginx会组合root和location的路径。
    #另外,使用alias时目录名后面一定要加“/”

    问题与解决

    1. php-fpm.log日志文件,提示错误
    server reached pm.max_children setting (5), consider raising it
    把  pm.max_children 设置为 500
    后来又提示
    you may need to increase pm.start_servers, or pm.min/max_spare_servers

    location 的配置

    location 优先级官方文档
    
        Directives with the = prefix that match the query exactly. If found, searching stops.
        All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
        Regular expressions, in order of definition in the configuration file.
        If #3 yielded a match, that result is used. Else the match from #2 is used.
    
        1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。
        2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
        3. 正则表达式,在配置文件中定义的顺序。
        4. 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

    http://www.nginx.cn/115.html

    https://linux.cn/article-5714-1.html


    配置 nginx.service

    # /usr/lib/systemd/system/nginx.service
    [Unit]
    Description=nginx - high performance web server
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    
    [Install]
    WantedBy=multi-user.target
  • 相关阅读:
    云计算、大数据和人工智能简单概述
    Linux 文件管理命令语法、参数、实例全汇总(一)
    C#之继承
    类和结构(二)
    类和结构(一)
    C#基础语法(二)
    C#基础语法(一)
    dotnet体系结构
    九卷读书:刘润商学院学习笔记1
    Linux内存管理
  • 原文地址:https://www.cnblogs.com/chy1000/p/5610931.html
Copyright © 2011-2022 走看看