1. 程式人生 > >2018-3-13 Linux學習筆記

2018-3-13 Linux學習筆記

12.6 Nginx安裝 12.7 默認虛擬主機 12.8 Nginx用戶認證 12.9 Nginx域名重定向

12.6 Nginx安裝
  • cd /usr/local/src
  • wget http://nginx.org/download/nginx-1.12.1.tar.gz
  • tar zxvf nginx-1.12.1.tar.gz
  • cd nginx-1.12.1
  • ./configure --prefix=/usr/local/nginx
  • make && make install
  • vim /etc/init.d/nginx #創建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
    ------------------------------------------------------------------------------------
    #以上代碼參考:
    https://coding.net/u/aminglinux/p/aminglinuxbook/git/blob/master/D15Z/etc_init.d_nginx
    ------------------------------------------------------------------------------------------------------------------------
  • chmod 755 /etc/init.d/nginx
  • chkconfig --add nginx
  • chkconfig nginx on

  • cd /usr/local/nginx/conf/
  • mv nginx.conf nginx.conf.bak
  • vim nginx.conf //創建nginx啟動腳本配置文件,寫入如下內容
    -----------------------------------------------------------------------------------------------------------------------
    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;
    }
    }
    }
    ---------------------------------------------------------------------------------------------------------------------------
    #以上代碼參考:
    https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf
    ---------------------------------------------------------------------------------------------------------------------------
  • /usr/local/nginx/sbin/nginx -t //檢查是否有語法錯誤
  • /etc/init.d/nginx start //啟動nginx服務
  • netstat -lntp |grep 80 //查看監聽80端口狀態

  • 測試php解析
    vi /usr/local/nginx/html/1.php //加入如下內容
    <?php
    echo "test php scripts.";
    ?>
    curl localhost/1.php //測試能否解析php
    技術分享圖片

  • 安裝過程中遇到的問題:
    [root@kh-01 nginx-1.12.1]# chkconfig --add nginx
    服務 nginx 不支持 chkconfig
    技術分享圖片
    技術分享圖片
    原因是nginx配置文件中有錯誤,更正為如下圖後就OK了.
    技術分享圖片

    12.7 默認虛擬主機

  • vim /usr/local/nginx/conf/nginx.conf
  • 把server{}這一部分先註釋掉,然後增加如下一行:
  • include vhost/*.conf;
    技術分享圖片
  • mkdir /usr/local/nginx/conf/vhost //創建虛擬主機目錄
  • cd /usr/local/nginx/conf/vhos
  • vim default.conf //加入如下內容
    server
    {
    listen 80 default_server; #有這個標記的就是默認虛擬主機
    server_name aaa.com;
    index index.html index.htm index.php;
    root /data/wwwroot/default;
    }
  • mkdir -p /data/wwwroot/default/
  • echo “This is a default site.”>/data/wwwroot/default/index.html
  • /usr/local/nginx/sbin/nginx -t
  • /usr/local/nginx/sbin/nginx -s reload #重新加載nginx

測試默認虛擬主機:

  • curl localhost
  • curl -x127.0.0.1:80 123.com
    技術分享圖片

12.8 Nginx用戶認證

  • 1.針對整個站點的用戶認證:
  • 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;
    }
    }

  • yum install -y httpd #安裝apache,如果沒有,有可跳過該步
  • /usr/local/apache2.4/bin/htpasswd -c /usr/local/nginx/conf/htpasswd Auth_user #指定用戶認證的用戶名
  • /usr/local/nginx/sbin/nginx -t
  • /usr/local/nginx/sbin/nginx -s reload #重新加載nginx
  • mkdir /data/wwwroot/test.com
  • echo “test.com”>/data/wwwroot/test.com/index.html

  • 測試用戶認證:
    (1)通過curl測試
    curl -x127.0.0.1:80 test.com -I #狀態碼為401說明需要驗證
    curl -uAuth_user:123 -x127.0.0.1:80 test.com -I #訪問狀態碼變為200
    技術分享圖片
    (2)通過瀏覽器訪問測試
    編輯windows的hosts文件,然後在瀏覽器中訪問test.com會有輸入用戶、密碼的彈窗

  • 2. 針對目錄的用戶認證
    location /admin/
    {
    auth_basic "Auth";
    auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    }

  • 3. 針對某個頁面的用戶認證
    location ~ admin.php
    {
    auth_basic "Auth";
    auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    }

知識點:
/usr/local/nginx/sbin/nginx -s reload
重新加載時,如果配置文件有語法錯誤,它是不生效的,這樣就不會導致nginx服務停掉;而重啟的話/usr/local/nginx/sbin/nginx restart則可能會導致nginx服務因有錯誤而不能正常啟動.

12.9 Nginx域名重定向

  • 編輯/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;
    }
    }
  • 測試結果:
    技術分享圖片
    知識點:
  • server_name後面支持寫多個域名,這是和httpd不同的,httpd只能通過server alias來做到這一點.
  • permanent為永久重定向,狀態碼為301,如果寫成redirect,則狀態碼為302.

擴展學習:
nginx.conf 配置詳解
http://www.ha97.com/5194.html
http://my.oschina.net/duxuefeng/blog/34880
nginx rewrite四種flag
http://www.netingcn.com/nginx-rewrite-flag.html

http://unixman.blog.51cto.com/10163040/1711943

2018-3-13 Linux學習筆記