오늘 로 된 https 때, nginx 이쪽 진행 https 인증 복호화 기능 추가, 그래서 백엔드 nginx 및 apache 다 필요 대해 무슨 변화, 업무 마찬가지입니다., 근데 한 업무 조금 다르다, 그 필요한 http 와 https 로 로 다른 따라 해 뱉은 다른 물건, nginx 이 한 겹 때문에 온 로 하는 ssl 관련 물건, 가서 백엔드 apache 이곳은 이미 http 거야 (이렇게 하는 목적은 수고를 및 성능 위해 고려한). 이것은 로컬 cgi 모른다는 전달 온 것은 http 요청 아니면 https 요청.
그래서 그냥 로 부팅할 프론트엔드 nginx 여긴 일부 조정 으로 얻을 수 있는지 백엔드 때 판단할 수 있는 것은 https.
그 한 간단한 방법은 바로 통해 rewrite 규칙을 요청한 인자를 증가할 것이다 뒤에 한 특별한 인자 데 이게 https 요구에 대해.
그래서 설정 전송 규칙, location 안에 설정 왜 것도 안 된다. 따라서 오직 server 안에 통해 if 판단 하거든요 설정 되었다.
if ( $request_uri ~* ^\/***\/ ) {
rewrite ^(.+)$ $1?***https=1 last;
}
문제가 해결되었다, 백엔드 apache 요청 까지 다 데리고 이전 특별한 ***https 요청 인자 그래, 따라서 편리하다 백엔드 진행해야 판단.
하하, 당연히 해도 설정 다른 가상 호스트 방식을 통해 유지될 수 있다. 그러나 이렇게 하면, 곧 프린트 한 부 프로그램 코드 를 https 쓰면 거의 같은 코드, 정말 번거롭다.
사용 nginx 있는 rewrite 때 부터 게다가 거야 $query_string 발견 가서 백엔드 매개 변수 는 double 거야, 찾기 좀 발견:
rewrite
문법: rewrite regex replacement flag
기본: none
범위: server, location, if
This directive changes URI in accordance with the regular expression and the replacement string. Directives are carried out in order of appearance in the configuration file.
이 명령 따라 식 변경하는 URI 또는 변경 문자열.명령 설정 파일에 순서 근거해서 실행.
Be aware that the rewrite regex only matches the relative path instead of the absolute URL. If you want to match the hostname, you should use an if condition, like so:
주의 재작성 표현 에 대해서 만 상대 경로 유효하다.만약 네가 생각하는 것 호스트 이름, 너는 마땅히 사용 이프문.
허허, rewrite 것은 다만 다시 경로 부분의 물건 을 안 수정을 사용자 입력 인자 때문에 여기 if 규칙 안에 니가 할 필요가 없다, 관심 사용자 브라우저 안에 입력 인자, rewrite 후 자동으로 추가 , 따라서 우리는 그냥 더하기 하나? 번호 및 뒤에 우리 원하는 일개 매개 변수 ***https=1 됩니다.
nginx의 rewrite 규칙 참조:
- ~ 대소문자 구분 일치하는 위해~* 을 안 대소문자 구분 일치!~와! ~* 각각 대소문자 구분 안 일치하는 및 안 대소문자 구분 안 필
- -f와! -f 여부를 판단할 수 없는 파일 열기-d 와! -d 판단할 수 있는 데 대해 디렉터리-e 와! -e 판단할 수 있는 데 대해 파일이나 디렉터리-x 와! -x 데 파일 실행 여부 판단
- last 에 아파치 안에 [L] 태그 / 완성 rewrite, 하하 그건 가장 상용하는break 종료 일치, 더 이상 일치 뒤에 규칙redirect 복귀 302 임시 전달 주소 표시줄을 후 주소를 이동 보이기permanent 복귀 301 영구 전달 주소 표시줄을 후 주소를 이동 보이기
- $args$content_length$content_type$document_root$document_uri$host$http_user_agent$http_cookie$limit_rate$request_body_file$request_method$remote_addr$remote_port$remote_user$request_filename$request_uri$query_string$scheme$server_protocol$server_addr$server_name$server_port$uri
결합 QeePHP 예를
- if (!-d $request_filename) {rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last;rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last;break;
많이 전성 매개 변수 목록
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
- if ($host ~* (.*)\.domain\.com) {set $sub_name $1;rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;}
디렉터리 교환한다
/123456/xxxx -> /xxxx?id=123456
- rewrite ^/(\d+)/(.+)//$2?id=$1 last;
예를 들어 사용자가 사용 설정 nginx 아래 ie 사용 다음으로 넘김 /nginx-ie 목록 아래에서:
- if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /nginx-ie/$1 break;}
디렉토리 자동 플러스”/”
- if (-d $request_filename){rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;}
금지htaccess
- location ~/\.ht {deny all;}
여러 목록 금지
- location ~ ^/(cron|templates)/ {deny all;break;}
으로 /data 시작하는 파일 금지
수 /data/ 금지 다음 다단계 목록 아래에서.log.txt 등 요청;
- location ~ ^/data {deny all;}
금지 단일 목록
금지.log.txt 요청 수 없다
- location /searchword/cron/ {deny all;}
금지 단일 파일
- location ~ /data/sql/data.sql {deny all;}
favicon.ico 및 robots.txt, 만료 날짜 설정;
여기 favicon.ico 위해 위해 99 날 robots.txt 위해 7일 결코 404 오류 로그 기록
- location ~(favicon.ico) {log_not_found off;expires 99d;break;}location ~(robots.txt) {log_not_found off;expires 7d;break;}
설정 어느 파일 만료 기간; 여기 위해 150 초, 결코 기록을 접근 로그
- location ^~ /html/scripts/loadhead_1.js {access_log off;root /opt/lampp/htdocs/web;expires 600;break;}
반 盗链 결코 지난 시간 설정 파일
여기 return 412 위해 사용자 http 상태 부호, 기본값은 403 편리하다 정확한 盗链 청을 찾아내다.
“rewrite ^/ ;”방범 체인 사진 한 장 보이기
“access_log off;”안 기록 접근 로그, 경감하다 압력
“expires 3d”모든 파일 3일 브라우저 캐시
- location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;if ($invalid_referer) {rewrite ^/ ;return 412;break;}access_log off;root /opt/lampp/htdocs/web;expires 3d;break;}
단지 가득 허 고정 ip 사이트를 방문할 있으며, 게다가 비밀번호
- root /opt/htdocs/www;allow 208.97.167.194;allow 222.33.1.2;allow 231.152.49.4;deny all;auth_basic “C1G_ADMIN”;auth_basic_user_file htpasswd;
다중 목록 될 다음 파일 전성 파일이 증강 서 효과
/job-123-456-789.html 지향/job/123/456/789.html
- rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;
이 커널의 루트 디렉터리 아래 어느 폴더를 가리키는 2 급 목록
같다/shanghai job/ 지향 /area/shanghai /
만약 당신 은 last 고쳐졌다 permanent 그렇게 웹 주소 표시줄에 현 은/location/shanghai/
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
위 예 어떤 문제는 방문 때 않을 것이다 /shanghai 일치
- rewrite ^/([0-9a-z]+)job$ /area/$1/ last;rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
이렇게 /shanghai 접근할 수도 있지만, 페이지 중 상대 링크 사용할 수 없다,
만약./list_1.html 실제 주소는/area/shanghia/list_1.html어떻게 /list_1.html, 전 ~ 접근할 수 없습니다.
그럼 내가 게다가 자동 이동 도 안돼 ~
(-d $request_filename)그것은 어떤 조건은 필수 사실이라고 목록, 때문에 내 rewrite 아니야. 그래서 효과가 없다
- if (-d $request_filename){rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;}
알고 원인을 처리하기 쉽다, 나 수동 갑니다.
- rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
파일과 디렉터리 이름 때 전달:
- if (!-e $request_filename) {proxy_pass ;}
도메인 이름 이동
- server{listen 80;server_name jump.c1gstudio.com;index index.html index.htm index.php;root /opt/lampp/htdocs/www;rewrite ^/ ;access_log off;}
많이 도메인 돌리다
- server_name www.c1gstudio.com www.c1gstudio.net;index index.html index.htm index.php;root /opt/lampp/htdocs;if ($host ~ “c1gstudio\.net”) {rewrite ^(.*) $1 permanent;}
삼단식 도메인 이동
- if ($http_host ~* “^(.*)\.i\.c1gstudio\.com$”) {rewrite ^(.*) $1;break;}
도메인 이름 거울 향해
- server{listen 80;server_name mirror.c1gstudio.com;index index.html index.htm index.php;root /opt/lampp/htdocs/www;rewrite ^/(.*) $1 last;access_log off;}
어떤 키 목록 하다 거울 향해
- location ^~ /zhaopinhui {rewrite ^.+ last;break;}
discuz ucenter home (uchome) rewrite
- rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2 last;rewrite ^/(space|network)\.html$ /$1.php last;rewrite ^/([0-9]+)$ /space.php?uid=$1 last;
discuz 7 rewrite
- rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3 last;rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3 last;rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;
discuz! 모 땅덩이가 따로 설정 도메인 주세요.
- server_name bbs.c1gstudio.com news.c1gstudio.com;location = / {if ($http_host ~ news\.c1gstudio.com$) {rewrite ^.+ last;break;}}
discuz ucenter 아바타 rewrite 최적화
- location ^~ /ucenter {location ~ .*\.php?${#fastcgi_pass unix:/tmp/php-cgi.sock;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf;}location /ucenter/data/avatar {log_not_found off;access_log off;location ~ /(.*)_big\.jpg$ {error_page 404 /ucenter/images/noavatar_big.gif;}location ~ /(.*)_middle\.jpg$ {error_page 404 /ucenter/images/noavatar_middle.gif;}location ~ /(.*)_small\.jpg$ {error_page 404 /ucenter/images/noavatar_small.gif;}expires 300;break;}}
jspace rewrite
- location ~ .*\.php?${#fastcgi_pass unix:/tmp/php-cgi.sock;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf;}location ~* ^/index.php/{rewrite ^/index.php/(.*) /index.php?$1 break;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fcgi.conf;}