Nginx 相关内容 [持续补充2017.09.06-更]

摘要

Nginx 相关内容 [持续补充]

Nginx 相关内容 [持续补充]

Nginx

version: 2017.09-01-更

一、启动Nginx目录浏览功能

  1. [root@abcdocker extra]# cat w.conf
  2. server {
  3. listen 80;
  4. server_name IP地址;
  5. location / {
  6. root html/bbs; #资源存放站点
  7. autoindex on; #开启目录浏览功能
  8. autoindex_localtime on; #开启以服务器本地时区显示文件修改日期
  9. autoindex_exact_size off; #关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b
  10. auth_basic "secret";
  11. auth_basic_user_file /usr/local/nginx/passwd.db;
  12. }
  13. }

效果图
image_1ba4co5535v6ket18c91tb21bnp9.png-77.7kB

如果有中文建议使用谷歌浏览器

提示: 我们可以把某些资源放在这个目录下面,但是现在的结果是不安全! 下面我就为大家介绍nginx加密访问

二、Nginx实战之让用户通过用户名密码认证访问web站点

1.编辑虚拟主机配置文件

  1. [root@rhel6u3-7 ~]# vim /usr/local/nginx/conf/extra/w.conf
  2. server {
  3. listen 80; //监听端口为80
  4. server_name w.abcdocker.com; //虚拟主机网址
  5. location / {
  6. root html/bbs; //虚拟主机网站根目录
  7. index index.html index.htm; //虚拟主机首页
  8. auth_basic "secret"; //虚拟主机认证命名
  9. auth_basic_user_file /usr/local/nginx/passwd.db; //虚拟主机用户名密码认证数据库
  10. }
  11. location /status {
  12. stub_status on; //开启网站监控状态
  13. access_log /usr/local/nginx/logs/www1_status.log; //监控日志
  14. auth_basic "NginxStatus"; }
  15. }

2.通过htpasswd命令生成用户名及对应密码数据库文件

  1. [root@abcdocker extra]# htpasswd -c /usr/local/nginx/passwd.db abcdocker
  2. New password:
  3. Re-type new password:
  4. Adding password for user abcdocker
  5. [root@abcdocker extra]# chmod 400 /usr/local/nginx/passwd.db
  6. [root@abcdocker extra]# chown nginx. /usr/local/nginx/passwd.db
  7. [root@abcdocker extra]# cat /usr/local/nginx/passwd.db
  8. abcdocker:$apr1$w3RqjNXW$mSiazU7t2THQqo3LrPmlP/

3.DNS服务器上添加www A记录

  1. w A 1.1.1.1

image_1ba4d5v8675r1f5ges71cfa1haqm.png-35.8kB

4.访问测试
image_1ba4d9ntq1i2rgop1oes13bbh0t13.png-78.4kB

三、NGINX添加到环境变量

正常安装后执行nginx需要 ./nginx

这太麻烦了,所以要把它加到环境变量里去,这样随便在哪个目录都可以直接执行nignx 也不用进到nginx/sbin目录

修改/etc/profile文件,在文件末尾加上如下两行

  1. PATH=$PATH:/usr/local/nginx/sbin
  2. export PATH

最好使用source /etc/profile 使用
.. /etc/profile可能会不生效

四、NGINX日志切割脚本、及NGINX启动/停止脚本

1、Nginx 日志切割脚本

  1. #!/bin/bash
  2. #URL=www.abcdocker.com
  3. #cut log file
  4. LOG_FILE_LIST=/root/log_file_list.txt
  5. for FILENAME in `cat $LOG_FILE_LIST`;do
  6. DATE=`date +%F`
  7. BACKUP_LOGFILE=${FILENAME}_${DATE}
  8. if [ -f $FILENAME ];then
  9. cat $FILENAME > $BACKUP_LOGFILE && gzip $BACKUP_LOGFILE && cat /dev/null > $FILENAME
  10. else
  11. echo "ERROR!$FILENAME is not exist."
  12. fi
  13. done
  14. find /data/logs/ -type f -name "*.log" -mtime +7 -exec rm -f {} \;
  15. find /data/logs/ -type f -name "*.gz" -mtime +7 -exec rm -f {} \;
  16. #shell: cat /root/log_file_list.txt
  17. /var/logs/nginx/access_www.log
  18. #此处存放日志路径

2、Nginx启动停止脚本

  1. #!/bin/bash
  2. # chkconfig: 2345 20 80
  3. # description: Saves and restores system entropy pool for \
  4. ##############################################
  5. #date:2016.8.8
  6. #QQ:604419314
  7. #blog:www.abcdocker.com######################
  8. . /etc/init.d/functions
  9. path=/usr/local/nginx/sbin/nginx
  10. if [ $# -ne 1 ];then
  11. echo "please input {status|start|stop|restart|reload}"
  12. fi
  13. nginx_status(){
  14. status=`lsof -i:80|wc -l`
  15. if [ $status -gt 2 ];then
  16. echo "nginx is running "
  17. else
  18. echo "nginx no running"
  19. fi
  20. }
  21. ##################
  22. nginx_start(){
  23. $path
  24. if [ $? -eq 0 ];then
  25. action "nginx start" /bin/true
  26. else
  27. action "nginx no start" /bin/false
  28. fi
  29. }
  30. nginx_stop(){
  31. $path -s stop
  32. if [ $? -eq 0 ];then
  33. action "nginx stop" /bin/true
  34. else
  35. action "nginx no stop" /bin/false
  36. fi
  37. }
  38. nginx_restart(){
  39. $path -s stop
  40. if [ $? -eq 0 ];then
  41. action "nginx stop" /bin/true
  42. else
  43. action "nginx no stop" /bin/false
  44. fi
  45. sleep 3
  46. $path
  47. if [ $? -eq 0 ];then
  48. action "nginx start" /bin/true
  49. else
  50. action "nginx no start" /bin/false
  51. fi
  52. }
  53. nginx_reload(){
  54. $path -s reload
  55. if [ $? -eq 0 ];then
  56. action "nginx reload" /bin/true
  57. else
  58. action "nginx no reload" /bin/false
  59. fi
  60. }
  61. case "$1" in
  62. start)
  63. nginx_start
  64. ;;
  65. stop)
  66. nginx_stop
  67. ;;
  68. restart)
  69. nginx_restart
  70. ;;
  71. reload)
  72. nginx_reload
  73. ;;
  74. status)
  75. nginx_status
  76. ;;
  77. esac

五、SLB场景使用Nginx封用户真实IP

场景: 前端SLB--->nginx---->proxy
image_1bc7do4022b11j7fqq5t3k9e99.png-79.4kB

1.首先需要配置SLB(阿里云负载均衡)让slb记录用户真实IP功能
image_1bc7e8as51be61ts8lcsg212com.png-49.7kB
此处勾选即可

创建SLB-官方文档

2.tomcat开启X-Forwarded-For日志功能
开启tomcat的X-Forwarded-For,在tomcat/conf/server.xml中,修改AccessLogValve日志纪录功能为如下内容:

  1. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  2. prefix="localhost_access_log." suffix=".txt"
  3. pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />

提示:修改完重启生效!!

下午被攻击的日志:
image_1bc7fhqo7igb1kqi15071cj1fv313.png-25.1kB

3.Nginx配置(安装不解释了)
在Server标签下添加如下几行

  1. set $allow true;
  2. if ($http_x_forwarded_for ~ "106.121.*.*|106.121.71.120|106.121.77.28|106.121.74.130|218.109.235.254"){
  3. set $allow false;
  4. }
  5. if ($allow = false){
  6. return 404;
  7. }
  8. #提示:IP添加在上面!

小结: 因为无法禁止用户进行访问,我们设置404可以让IP无法进行访问数据库。不然数据库会被查询语句进行刷爆


六、nginx proxy_pass后的url加不加/的区别

nginx配置proxy_pass,需要注意转发的路径配置

第一种:proxy_pass后缀不加斜杠

  1. location /abc/ {
  2. proxy_pass http://172.16.1.38:8080;
  3. }

第二种:proxy_pass后缀加斜杠

  1. location /abc/ {
  2. proxy_pass http://172.16.1.38:8081/;
  3. }

上面两种配置,区别只在于proxy_pass转发的路径后是否带 /

针对情况1,如果访问url = http://server/abc/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/abc/test.jsp,将test/ 作为根路径,请求test/路径下的资源

针对情况2,如果访问url = http://server/abc/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源

典型实例:

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. upstream app{
  11. server 172.16.1.38:8233;
  12. }
  13. upstream online{
  14. server 172.16.1.38:8239;
  15. }
  16. server {
  17. listen 881;
  18. server_name IP;
  19. location /bxg/user/ {
  20. root /root;
  21. index index.html index.htm;
  22. proxy_set_header Host $http_host;
  23. proxy_set_header X-Real-IP $remote_addr;
  24. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25. client_max_body_size 100m;
  26. proxy_pass http://online;
  27. 解释:当我们访问http://IP/881/bxg/user/下面的资源,nginx会帮我们跳转到online下面对应的IP+端口
  28. 此时返回的url =http://IP/881/bxg/user/1.txt
  29. }
  30. location /bxg/app/ {
  31. proxy_set_header Host $http_host;
  32. proxy_set_header X-Real-IP $remote_addr;
  33. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  34. client_max_body_size 100m;
  35. proxy_pass http://app/;
  36. 解释:当我们访问http://IP/881/bxg/app/下面的资源(此时proxy_pass后面带斜杠),nginx也会帮我们跳转到app下面对应的IP+端口
  37. 此时返回的url =http://IP/881/1.txt
  38. }
  39. #这行属于默认匹配,就是后面什么也不添加,881端口就直接调用这个项目
  40. location / {
  41. root /root;
  42. index index.html index.htm;
  43. proxy_set_header Host $http_host;
  44. proxy_set_header X-Real-IP $remote_addr;
  45. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  46. client_max_body_size 100m;
  47. proxy_pass http://app;
  48. }
  49. }

提示:这种location常用于只有一个公网IP和端口场景,内网IP没有进行映射,但是又需要请求我们的内网服务器的服务,就可以使用location的模式。

location常用的场景还有类似于专题页面

  1. location /a{
  2. root /data/online-active-page/web/subject;
  3. index itcast.html;
  4. }
  5. location /b{
  6. root /data/online-active-page/web/subject;
  7. index itheima.html;
  8. }

当访问https://abcdocker.com/a/ 匹配对应/data/online-active-page/web/subject下文件
当访问https://abcdocker.com/b/ 匹配对应/data/online-active-page/web/subject下文件


七、常用rewrite

当我们想输入https://abcdocker.com/web/1/1.html 直接页面跳转到https://abcdocker.com/class
可以采用下面方式

  1. rewrite ^/web/1/1.html https://abcdocker.com/class permanent;
  2. rewrite ^/web/microClassroom/microClassroom.html https://abcdocker.com/course/micro permanent;
  3. rewrite ^/web/freeofcharge/freeofcharge.html https://abcdocker.com/course/free permanent;
  4. rewrite ^/web/html/ansAndQus.html https://abcdocker.com/ask permanent;

提示:场景常用语开发代码调用接口

整站htps
常用的有以下rewrite

  1. rewrite ^(.*) https://$host$1 permanent;
  2. return 301 https://$server_name$request_uri;


    A+
发布日期:2017年03月01日  所属分类:NGINX
标签:
新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. 泉州网络营销 0
    很好的学习技术内容啊