因有一個 web 服務要設多語系,是用 php 寫的.
用子網域做為切換多語系功能.
所以 .env 定義:
LANG_EN_URL=en.webtest.aidec.com.tw
LANG_TW_URL=tw.webtest.aidec.com.tw
LANG_CN_URL=cn.webtest.aidec.com.tw
這三個都指到
/var/www/html/web/public 資料夾下
Apache 是內網主機: 10.10.10.133
++++++++++++++++++++++++++++++++++++++++++++++++++
...
IncludeOptional conf.d/.conf
IncludeOptional sites-enabled/.conf # 加入此行
++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++
<VirtualHost *:80>
ServerAdmin service@aidec.com.tw
ServerName webtest.aidec.com.tw
# ServerAlias aidec.tw
DocumentRoot /var/www/html/web
ErrorLog /var/www/html/error.log
CustomLog /var/www/html/requests.log combined
<VirtualHost *:80>
DocumentRoot /var/www/html/web/public
ServerName en.webtest.aidec.com.tw
<VirtualHost *:80>
DocumentRoot /var/www/html/web/public
ServerName tw.webtest.aidec.com.tw
<VirtualHost *:80>
DocumentRoot /var/www/html/web/public
ServerName cn.webtest.aidec.com.tw
++++++++++++++++++++++++++++++++++++++++++++++++++
上述不透過 nginx 會成功!
但若改為 nginx 80 轉為 443 在對應至 apache 子網域,會失敗?
請問 nginx 要如何設定?
我設定 nginx 如下:
nginx\conf.d\tw.webtest.aidec.com.tw
server {
listen 80;
server_name tw.aidec.tej.com.tw;
return 301 https://tw.webtest.aidec.com.tw$request_uri;
server_tokens off;
}
server {
listen 443 ssl;
server_name tw.webtest.aidec.com.tw; #change to your domain name
ssl on;
ssl_certificate /etc/nginx/aidec_ssl/domaincert.cer;
ssl_certificate_key /etc/nginx/aidec_ssl/server.key;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA";
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000; preload";
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://10.10.10.133/web/public; #change to your internal server IP
proxy_redirect off;
}
}
敬請諸位大大幫忙!
你在nginx是用proxy轉向的,但你用ip轉向。
但你在 Apache 是設定子網域。理論上用ip指向會無法對應到的。
基本可以教你幾招。
第一種是用port招。
<VirtualHost *:8081>
DocumentRoot /var/www/html/web/public
ServerName en.webtest.aidec.com.tw
<VirtualHost *:8082>
DocumentRoot /var/www/html/web/public
ServerName tw.webtest.aidec.com.tw
<VirtualHost *:8083>
DocumentRoot /var/www/html/web/public
ServerName cn.webtest.aidec.com.tw
這樣就可以用指定的port去做對應。
第二招是host招,只是這招有危險性
去改你的host文件。將對應的域名ip設定。
然後直接proxy域名不要用ip。
但一般來說,建議還是不要跟原域名一樣的。
最後,再教你一招,http轉https的nginx寫法。
改成底下這樣子,以後只要動server_name就好。
server {
listen 80;
server_name abc.com;
return 301 https://$host$request_uri;
}