nginx配置管理

nginx

源码安装

wget https://nginx.org/download/nginx-1.20.1.tar.gz

tar -zxvf ./nginx-1.20.1.tar.gz

apt-get install libpcre3-dev zlib1g-dev gcc make -y

apt-get install openssl libssl-dev

cd nginx-1.20.1

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf  --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module

make 

make install

进程的查看

  1. netstat -tnupl | grep nginx
  2. ps -ef | grep nginx
  3. ps aux |grep nginx

配置开机自启:

脚本来源:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

在init.d目录下打开一个nginx文件:

vi /etc/init.d/nginx

输入以下内容(以下内容为自启动脚本:只需要修改配置文件路径和可执行文件路径,以下有中文进行说明):

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

# 可执行文件位置
nginx="/usr/local/nginx/nginx"
prog=$(basename $nginx)

# 配置文件位置
NGINX_CONF_FILE="/usr/local/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -n "$user" ]; then
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep 'configure arguments:'`
      for opt in $options; do
          if [ `echo $opt | grep '.*-temp-path'` ]; then
              value=`echo $opt | cut -d "=" -f 2`
              if [ ! -d "$value" ]; then
                  # echo "creating" $value
                  mkdir -p $value && chown -R $user $value
              fi
          fi
       done
    fi
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $prog -HUP
    retval=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

然后为所有用户提供对该文件的可执行权限:

chmod a+x /etc/init.d/nginx

配置开机自启:

chkconfig --add /etc/init.d/nginx

chkconfig nginx on

开启SSL

80端口放通http协议,443端口放通https协议
server {
        listen       80;
        server_name 你的域名;
        root 你想要写的根路径;
        return 301 https://$host$request_uri; 
        charset koi8-r;
    }
   server {
        listen 443 ssl;
        server_name  你的域名;
        root 你想要写的根路径;
        ssl_certificate      证书路径;
        ssl_certificate_key  证书密钥路径;
        location / {
            index  index.php index.html index.htm;
        }
 		location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_pass    unix:/run/php-fpm/php-fpm.sock;
        }

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

         location ~ /\.ht {
                           deny  all;
         }
        }
}
                               
80端口放通http协议,非443端口放通https协议
server {
        listen       80;
        server_name 你的域名;

        root 你想要写的根路径;
        charset koi8-r;
        location / {
            proxy_pass   http://你的域名:2000/;

        }
    }
   server {
        listen 2000 ssl;
        server_name  你的域名;
        root 你想要写的根路径;
        ssl_certificate      证书路径;
        ssl_certificate_key  证书密钥路径;
        error_page 497 301 https://你的域名:2000/;
        location / {
            index  index.php index.html index.htm;
        }
 		location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_pass    unix:/run/php-fpm/php-fpm.sock;
        }

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

         location ~ /\.ht {
                           deny  all;
         }
        }
}
                               

反向代理加密SSL

upstream可以对外屏蔽内部服务真实的监听端口

 upstream backend {
        server 127.0.0.1:反向代理的应用的监听端口;
    }

server {
         listen 80;
         server_name 你的站点域名;
         location / {
               rewrite ^(.*)$ https://$host:2055$1 permanent;          
         }
    }

    server{
        #listen 80;
        listen 2055 ssl;
        server_name 你的域名;
        ssl_certificate      证书路径;
        ssl_certificate_key  证书密钥路径;
        location / {
            proxy_pass http://backend;
        }
 }

代理tomcat

tomcat的端口号假设是8080,examples是tomcat下的一个应用,此时examples后的/必须加。

 server{
        listen 80;
        server_name 你的域名;
        location /{
                proxy_pass http://127.0.0.1:8080/examples/;

        }
    }

location

匹配参数
  1. “=” ,精确匹配

  2. “~”,执行正则匹配,区分大小写。

  3. “~*”,执行正则匹配,忽略大小写

  4. “^~”,表示普通字符串匹配上以后不再进行正则匹配。

  5. 不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了“”与“^

  6. “@”,nginx内部跳转

nginx全局变量

名称说明
$arg_name请求中的name参数
$args请求中的参数
$binary_remote_addr远程地址的二进制表示
$body_bytes_sent已发送的消息体字节数
$content_lengthHTTP请求信息里的"Content-Length"
$content_type请求信息里的"Content-Type"
$document_root针对当前请求的根路径设置值
$document_uri与uri相同
$host请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名
$hostname机器名使用 gethostname系统调用的值
$http_cookiecookie 信息
$http_referer引用地址
$http_user_agent客户端代理信息
$http_via最后一个访问服务器的Ip地址。
$http_x_forwarded_for相当于网络访问路径
$is_args如果请求行带有参数,返回"?",否则返回空字符串
$limit rate对连接速率的限制
$nginx_version当前运行的nginx版本号
$pidworker进程的PID
$query_string与 args相同
$realpath_root按root指令或alias指令算出的当前请求的绝对路径。其中的符号链接都会解析 成真是文件路径
$remote_addr客户端IP地址
$remote_port客户端端☐号
$remote_user客户端用户名,认证用
$request用户请求
$request_body这个变量包含请求的主要信息。在使用proxy_pass或 fastcgi_pass指令的location中比较有意义
$request_body_file客户端请求主体信息的临时文件名
$request_completion如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部 分则设为空
$request_filename当前请求的文件路径名,比如/opt/nginx/www/test.php
$request_method请求的方法,比如"GET"、"POST"等
$request_uri请求的URI,带参数
$scheme所用的协议,比如http或者是http
$server_addr服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系 统调用以取得地址(造成资源浪费)
$server_name请求到达的服务器名
$server_port请求到达的服务器端☐号
$server_protocol请求的协议版本,HTTP/1.0"或"HTTP/1.1"
$uri请求的URI,可能和最初的值有不同,比如经过重定向之类的

allow 和 deny

如果下面的allow的ip无127.0.0.1,即便127.0.0.1是本机地址,也会被拒绝

server {
    listen web_server_private_IP:80;

    allow load_balancer_1_private_IP;
    allow load_balancer_2_private_IP;
    deny all;
 }

rewrite

https://blog.csdn.net/kikajack/article/details/80669260

语法格式
rewrite 正则表达式	替代内容	flag标记
flag说明
last本条规则匹配完成后,继续向下匹配新的location URI规则
break本条规则匹配完成即终止,不再匹配后面的任何规则
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
rewrite使用场景

Nginx的rewrite功能在企业里应用非常广泛:

  • 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

  • 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

  • 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

  • 根据特殊变量、目录、客户端的信息进行URL调整等

nginx开发从入门到精通资料

GitHub - taobao/nginx-book: Nginx开发从入门到精通

解析 nginx 访问日志并格式化输出有用的信息,可以用来实时了解你的服务器正在发生的情况。

GitHub - lebinh/ngxtop: Real-time metrics for nginx server

安装
pip3 install ngxtop
简单使用
ngxtop

error

错误端口301重定向问题

​ 向清口浏览器缓存,清楚的缓存为缓存的图像和文件,之后如果再不行,就是服务器的问题。

上传文件太大

​ 只需要修改nginx上最大传文件即可,在http块中加入 client_max_body_size 10m。

最后

同时欢迎访问我自己搭建的个人学习笔记,这个站点的一些笔记有些可能是没整理好的,很大原因是将来很长一段时间都不会花时间整理,所以就先放上面。
暂不欢迎访问我的个人博客,因为上面还没放可堪一放的文章。
这是以后可用于分享资源的站点,zfile是一个不错的github项目,因此我采用zfile搭建了这样一个关注于分享个人资源的站点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值